diff --git a/CMakeLists.txt b/CMakeLists.txt index f7dbc296..c0b1b8b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,18 @@ else() message(FATAL_ERROR, "Cannot locate opensubdiv/version.h in CMAKE_SOURCE_DIR") endif() +# Evaluate 'soname' from OSD version + + # replace '_' with '.' + string(REGEX REPLACE "(_)" "." OSD_SONAME ${OpenSubdiv_VERSION}) + + # remove starting 'v' character + string(REGEX REPLACE "^v" "" OSD_SONAME ${OSD_SONAME}) + + add_definitions( + -DOPENSUBDIV_VERSION_STRING="${OSD_SONAME}" + ) + #------------------------------------------------------------------------------- message(STATUS "Compiling ${CMAKE_PROJECT_NAME} version ${OpenSubdiv_VERSION}") @@ -121,16 +133,16 @@ SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(OSD_COMPILER_FLAGS) -# Disable spurious warnings in gcc builds and clang +# Disable spurrious warnings in gcc builds and clang if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANGCC OR CMAKE_COMPILER_IS_ICC ) # Turn on all warnings if(CMAKE_COMPILER_IS_ICC) - list(APPEND OSD_COMPILER_FLAGS -w3 -wd1418 -wd981 -wd383 -wd193) + list(APPEND OSD_COMPILER_FLAGS -w2 -wd1572 -wd1418 -wd981 -wd383 -wd193 -wd444) else() list(APPEND OSD_COMPILER_FLAGS -Wall -Wextra) endif() - + # HBR uses the offsetof macro on a templated struct, which appears # to spurriously set off this warning in both gccc and Clang list(APPEND OSD_COMPILER_FLAGS -Wno-invalid-offsetof) @@ -218,6 +230,9 @@ elseif(MSVC) /W3 # Use warning level recommended for production purposes. /WX # Treat all compiler warnings as errors. + # warning C4005: macro redefinition + /wd4005 + # these warnings are being triggered from inside VC's header files # warning C4350: behavior change: 'member1' called instead of 'member2' /wd4350 @@ -275,8 +290,8 @@ option(MAYA_LOCATION "Path to Maya" "") option(NO_LIB "Disable the opensubdiv libs build (caveat emptor)" OFF) option(NO_EXAMPLES "Disable examples build" OFF) +option(NO_TUTORIALS "Disable tutorials build" OFF) option(NO_REGRESSION "Disable regression tests build" OFF) -option(NO_PYTHON "Disable Python SWIG build" OFF) option(NO_MAYA "Disable Maya plugin build" OFF) option(NO_PTEX "Disable PTex support" OFF) option(NO_DOC "Disable documentation build" OFF) @@ -285,8 +300,7 @@ option(NO_TBB "Disable TBB backend" OFF) option(NO_CUDA "Disable CUDA backend" OFF) option(NO_OPENCL "Disable OpenCL backend" OFF) option(NO_CLEW "Disable CLEW wrapper library" OFF) -option(NO_GCD "Disable GrandCentralDispatch backend" OFF) -option(NO_NEON "Disable NEON backend" OFF) +option(NO_OPENGL "Disable OpenGL support") # Check for dependencies if(NOT NO_OMP) @@ -295,13 +309,15 @@ endif() if(NOT NO_TBB) find_package(TBB 4.0) endif() -find_package(OpenGL) +if (NOT NO_OPENGL) + find_package(OpenGL) +endif() find_package(OpenGLES) if(NOT NO_OPENCL) if(NOT NO_CLEW) find_package(CLEW) endif() - if(NOT CLEW_FOUND) + if (NOT CLEW_FOUND) find_package(OpenCL 1.1) else() set(OPENCL_FOUND TRUE) @@ -311,15 +327,11 @@ if(NOT NO_CUDA) find_package(CUDA 4.0) endif() if(NOT ANDROID AND NOT IOS) - find_package(GLFW 2.7.0) + find_package(GLFW 3.0.0) endif() if(NOT NO_PTEX) find_package(PTex 2.0) endif() -find_package(PythonInterp 2.6) -find_package(SWIG 1.3.40) -find_package(Doxygen 1.8.4) -find_package(Docutils 0.6) if (OPENGL_FOUND AND NOT IOS) if (APPLE) find_package(GLEW) @@ -332,30 +344,21 @@ if (WIN32) find_package(DXSDK) endif() -if (NOT NO_GCD AND APPLE) - set(GCD_FOUND 1) -endif() - -if (NOT NO_NEON AND ANDROID) - set(NEON_FOUND 1) -endif() - if (NOT NO_MAYA) find_package(Maya 201200) endif() +if (NOT NO_DOC) + find_package(Doxygen 1.8.4) + find_package(Docutils 0.6) +else() + set(DOXYGEN_EXECUTABLE ) +endif() + # Warn about missing dependencies that will cause parts of OpenSubdiv to be # disabled. Also, add preprocessor defines that can be used in the source # code to determine if a specific dependency is present or not. -if(GCD_FOUND) - add_definitions( -DOPENSUBDIV_HAS_GCD ) -endif() - -if(NEON_FOUND) - add_definitions(-DLOCAL_ARM_MODE=arm -DLOCAL_ARM_NEON=true -mfpu=neon) -endif() - if(OPENMP_FOUND) add_definitions( -DOPENSUBDIV_HAS_OPENMP @@ -403,11 +406,13 @@ if(GLEW_FOUND AND OPENGL_4_2_FOUND) -DOPENSUBDIV_HAS_GLSL_TRANSFORM_FEEDBACK ) else() - message(WARNING - "OpenGL 4.2 was not found : support for GLSL transform feedback kernels " - "will be disabled in Osd. If you have an OpenGL SDK installed " - "(version 4.2 or above), please refer to the FindOpenGL.cmake " - "shared module in your cmake installation.") + if (NOT NO_OPENGL) + message(WARNING + "OpenGL 4.2 was not found : support for GLSL transform feedback kernels " + "will be disabled in Osd. If you have an OpenGL SDK installed " + "(version 4.2 or above), please refer to the FindOpenGL.cmake " + "shared module in your cmake installation.") + endif() endif() # note : (GLSL compute shader kernels require GL 4.3) @@ -416,11 +421,13 @@ if(GLEW_FOUND AND OPENGL_4_3_FOUND) -DOPENSUBDIV_HAS_GLSL_COMPUTE ) else() - message(WARNING - "OpenGL 4.3 was not found : support for GLSL compute shader kernels " - "will be disabled in Osd. If you have an OpenGL SDK installed " - "(version 4.3 or above), please refer to the FindOpenGL.cmake " - "shared module in your cmake installation.") + if (NOT NO_OPENGL) + message(WARNING + "OpenGL 4.3 was not found : support for GLSL compute shader kernels " + "will be disabled in Osd. If you have an OpenGL SDK installed " + "(version 4.3 or above), please refer to the FindOpenGL.cmake " + "shared module in your cmake installation.") + endif() endif() if(OPENGLES_FOUND) @@ -443,8 +450,8 @@ if(OPENCL_FOUND) if (NOT NO_CLEW) message(WARNING "OpenCL was found, but CLEW was not. " - "Building with OpenCL support enabled, but the build " - "wouldn't be portable on systems without OpenCL installed.") + "Building with OpenCL support enabled, but the built binary " + "will not be portable to systems without OpenCL installed.") endif() endif() else() @@ -584,23 +591,20 @@ function(_stringify src_files varname) foreach(src_file ${src_files}) - string(REGEX REPLACE ".*[.](.*)" "\\1" extension "${src_file}") + string(REGEX REPLACE ".*[.](.*)" "\\1" extension "${src_file}") - if(NOT ${extension} STREQUAL "cu") + string(REGEX REPLACE "(.*)[.].*" "\\1.gen.h" inc_file "${src_file}") + list(APPEND inc_files "${CMAKE_CURRENT_BINARY_DIR}/${inc_file}") - string(REGEX REPLACE "(.*)[.].*" "\\1.gen.h" inc_file "${src_file}") - list(APPEND inc_files "${inc_file}") + add_custom_command( + OUTPUT + "${CMAKE_CURRENT_BINARY_DIR}/${inc_file}" + COMMAND + stringify "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}" "${CMAKE_CURRENT_BINARY_DIR}/${inc_file}" + DEPENDS + stringify "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}" + ) - add_custom_command( - OUTPUT - "${CMAKE_CURRENT_BINARY_DIR}/${inc_file}" - COMMAND - stringify "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}" "${CMAKE_CURRENT_BINARY_DIR}/${inc_file}" - DEPENDS - stringify "${CMAKE_CURRENT_SOURCE_DIR}/${src_file}" - ) - - endif() endforeach() set(${varname} ${inc_files} PARENT_SCOPE) endfunction() @@ -670,7 +674,7 @@ endmacro() add_subdirectory(opensubdiv) -if (NOT NO_REGRESSION AND NOT ANDROID AND NOT IOS) # XXXdyu +if (NOT ANDROID AND NOT IOS) # XXXdyu add_subdirectory(regression) endif() @@ -678,8 +682,8 @@ if (NOT NO_EXAMPLES) add_subdirectory(examples) endif() -if (NOT NO_PYTHON) - add_subdirectory(python) +if (NOT NO_TUTORIALS) + add_subdirectory(tutorials) endif() if (NOT NO_DOC) diff --git a/NOTICE.txt b/NOTICE.txt index 2acf5afa..baec75f3 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -2,8 +2,9 @@ Copyright 2013 Pixar All rights reserved. - This product includes software developed at - Pixar (http://www.pixar.com/). - Autodesk, Inc. (http://www.autodesk.com/). - Google, Inc. (http://www.google.com/). - DigitalFish (http://digitalfish.com/). + This product includes software developed at: + Pixar (http://www.pixar.com/). + Dreamworks Animation (http://www.dreamworksanimation.com/) + Autodesk, Inc. (http://www.autodesk.com/). + Google, Inc. (http://www.google.com/). + DigitalFish (http://digitalfish.com/). diff --git a/README.md b/README.md index fb2178e3..761b3523 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,11 @@ Feel free to use it and let us know what you think. For more details about OpenSubdiv, see [Pixar Graphics Technologies](http://graphics.pixar.com). +# 3.0 ALPHA Release + +The OpenSubdiv 3.0 release is still early in its development cycle. As such, all APIs, code examples and documentation are subject to change at any time, without notice or backward compatibility with existing code. Please consult the [release notes](http://graphics.pixar.com/opensubdiv/docs_3x_alpha/intro.html) for more details about the features and improvements contained in this new release. + +The 3.0 Beta release is tentatively scheduled for late Q4 2014. ## Git Flow @@ -31,6 +36,7 @@ Required: Optional: * [GLEW](http://sourceforge.net/projects/glew/) (Windows/Linux only) * [CUDA](http://developer.nvidia.com/category/zone/cuda-zone) +* [TBB] (https://www.threadingbuildingblocks.org/) * [OpenCL](http://www.khronos.org/opencl/) * [GLFW](http://www.glfw.org/) * [Ptex](https://github.com/wdas/ptex) @@ -56,16 +62,17 @@ Optional: -DNO_LIB=1 // disable the opensubdiv libs build (caveat emptor) -DNO_EXAMPLES=1 // disable examples build +-DNO_TUTORIALS=1 // disable tutorials build -DNO_REGRESSION=1 // disable regression tests build --DNO_PYTHON=1 // disable Python SWIG build -DNO_MAYA=1 // disable Maya plugin build -DNO_PTEX=1 // disable PTex support -DNO_DOC=1 // disable documentation build -DNO_OMP=1 // disable OpenMP +-DNO_TBB=1 // disable TBB -DNO_CUDA=1 // disable CUDA -DNO_OPENCL=1 // disable OpenCL +-DNO_OPENGL=1 // disable OpenGL -DNO_CLEW=1 // disable CLEW wrapper library --DNO_GCD=1 // disable GrandCentralDispatch on OSX ```` The paths to Maya, Ptex, GLFW, and GLEW can also be specified through the diff --git a/cmake/FindGLEW.cmake b/cmake/FindGLEW.cmake index ab138542..222379e8 100644 --- a/cmake/FindGLEW.cmake +++ b/cmake/FindGLEW.cmake @@ -33,7 +33,8 @@ include(FindPackageHandleStandardArgs) if (WIN32) - find_path( GLEW_INCLUDE_DIR + + find_path(GLEW_INCLUDE_DIR NAMES GL/glew.h PATHS @@ -41,9 +42,15 @@ if (WIN32) "$ENV{GLEW_LOCATION}/include" "$ENV{PROGRAMFILES}/GLEW/include" "${PROJECT_SOURCE_DIR}/extern/glew/include" - DOC "The directory where GL/glew.h resides" ) + DOC "The directory where GL/glew.h resides" ) - find_library( GLEW_LIBRARY + if ("${CMAKE_GENERATOR}" MATCHES "[Ww]in64") + set(ARCH x64) + else() + set(ARCH x86) + endif() + + find_library(GLEW_LIBRARY NAMES glew GLEW glew32s glew32 PATHS @@ -52,7 +59,9 @@ if (WIN32) "$ENV{PROGRAMFILES}/GLEW/lib" "${PROJECT_SOURCE_DIR}/extern/glew/bin" "${PROJECT_SOURCE_DIR}/extern/glew/lib" - DOC "The GLEW library") + PATH_SUFFIXES + Release/${ARCH} + DOC "The GLEW library") endif () if (${CMAKE_HOST_UNIX}) diff --git a/cmake/FindMaya.cmake b/cmake/FindMaya.cmake index 203e05e0..d4027c72 100644 --- a/cmake/FindMaya.cmake +++ b/cmake/FindMaya.cmake @@ -56,6 +56,7 @@ if(APPLE) HINTS "${MAYA_LOCATION}" "$ENV{MAYA_LOCATION}" + "/Applications/Autodesk/maya2015/Maya.app/Contents" "/Applications/Autodesk/maya2014/Maya.app/Contents" "/Applications/Autodesk/maya2013.5/Maya.app/Contents" "/Applications/Autodesk/maya2013/Maya.app/Contents" @@ -82,6 +83,8 @@ if(UNIX) HINTS "${MAYA_LOCATION}" "$ENV{MAYA_LOCATION}" + "/usr/autodesk/maya2015-x64" + "/usr/autodesk/maya2014-x64" "/usr/autodesk/maya2013-x64" "/usr/autodesk/maya2012.17-x64" "/usr/autodesk/maya2012-x64" @@ -107,6 +110,10 @@ if(WIN32) HINTS "${MAYA_LOCATION}" "$ENV{MAYA_LOCATION}" + "C:/Program Files/Autodesk/Maya2015.5-x64" + "C:/Program Files/Autodesk/Maya2015.5" + "C:/Program Files/Autodesk/Maya2014.5-x64" + "C:/Program Files/Autodesk/Maya2014.5" "C:/Program Files/Autodesk/Maya2013.5-x64" "C:/Program Files/Autodesk/Maya2013.5" "C:/Program Files (x86)/Autodesk/Maya2013.5" diff --git a/documentation/CMakeLists.txt b/documentation/CMakeLists.txt index 77de4808..8afd97b7 100644 --- a/documentation/CMakeLists.txt +++ b/documentation/CMakeLists.txt @@ -30,20 +30,20 @@ if (DOXYGEN_FOUND) add_custom_target(doc_doxy ${DOXYGEN_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/OpenSubdiv.doxy" - WORKING_DIRECTORY + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/public_headers/" DEPENDS public_headers - COMMENT + COMMENT "Generating API documentation with Doxygen" VERBATIM ) list(APPEND DOC_TARGETS doc_doxy) - install( + install( DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/doxy_html" - DESTINATION + DESTINATION "${CMAKE_DOCDIR_BASE}" ) @@ -54,6 +54,7 @@ else() endif() +find_package(PythonInterp 2.6) # ReST - HTML documentation if (DOCUTILS_FOUND AND PYTHONINTERP_FOUND) @@ -62,33 +63,54 @@ if (DOCUTILS_FOUND AND PYTHONINTERP_FOUND) search.html ) - set(RST_FILES + set(RST_FILES additional_resources.rst api_overview.rst cmake_build.rst code_examples.rst dxviewer.rst + dxptexviewer.rst far_overview.rst getting_started.rst - glviewer.rst + glevallimit.rst + glfvarviewer.rst + glpainttest.rst + glptexviewer.rst + glsharetopology.rst glstencilviewer.rst - glbatchviewer.rst + glviewer.rst hbr_overview.rst - intro.rst - limiteval.rst + intro.rst maya_osdpolysmooth.rst osd_overview.rst - painttest.rst - ptexviewer.rst - release_notes.rst - subdivision_surfaces.rst + release_notes.rst + release_notes_2x.rst + sdc_overview.rst + subdivision_surfaces.rst + tutorials.rst using_osd.rst using_osd_compile.rst using_osd_hbr.rst using_osd_textures.rst - uvviewer.rst + vtr_overview.rst ) + + # Configure release number in RST template file + + # Replace '_' with '.' + string(REGEX REPLACE "(_)" "." RELEASE_STRING ${OpenSubdiv_VERSION}) + + # Remove starting 'v' character + string(REGEX REPLACE "^v" "" RELEASE_STRING ${RELEASE_STRING}) + + # Format API version string + set(RELEASE_STRING "Release ${RELEASE_STRING}") + + # Replace string in navigation bar + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/rst_template.txt" + "${CMAKE_CURRENT_BINARY_DIR}/rst_template.txt" ) + # process rst markup files foreach(src ${RST_FILES}) get_filename_component(BASENAME ${src} NAME_WE) @@ -97,17 +119,17 @@ if (DOCUTILS_FOUND AND PYTHONINTERP_FOUND) set(outfile "${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}.html") add_custom_command( - OUTPUT + OUTPUT "${outfile}" - COMMAND + COMMAND "${RST2HTML_EXECUTABLE}" - ARGS + ARGS --date --time - --no-xml-declaration + --no-xml-declaration --initial-header-level=3 --strip-comments - --template="${CMAKE_CURRENT_SOURCE_DIR}/rst_template.txt" + --template="${CMAKE_CURRENT_BINARY_DIR}/rst_template.txt" --stylesheet=css/rst.css --link-stylesheet "${infile}" "${outfile}" @@ -119,13 +141,13 @@ if (DOCUTILS_FOUND AND PYTHONINTERP_FOUND) list(APPEND RST_TARGETS ${src}) - install( + install( FILES "${outfile}" - DESTINATION + DESTINATION "${CMAKE_DOCDIR_BASE}" - PERMISSIONS - OWNER_READ GROUP_READ WORLD_READ + PERMISSIONS + OWNER_READ GROUP_READ WORLD_READ ) endforeach() @@ -148,15 +170,15 @@ if (DOCUTILS_FOUND AND PYTHONINTERP_FOUND) list(APPEND HTML_TARGETS ${src}) - install( + install( FILES "${outfile}" - DESTINATION + DESTINATION "${CMAKE_DOCDIR_BASE}" ) endforeach() - # copy the site resources to the build area so that the + # copy the site resources to the build area so that the # documentation can be read without an install add_custom_target(doc_html_images COMMAND @@ -180,41 +202,41 @@ if (DOCUTILS_FOUND AND PYTHONINTERP_FOUND) "${CMAKE_CURRENT_SOURCE_DIR}/processHtml.py" "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/nav_template.txt" - DEPENDS + DEPENDS ${HTML_TARGETS} ${RST_TARGETS} doc_tipuesearch ) - add_custom_target(doc_html - DEPENDS - search_index + add_custom_target(doc_html + DEPENDS + search_index ${HTML_TARGETS} ${RST_TARGETS} - doc_html_images - doc_html_css + doc_html_images + doc_html_css doc_tipuesearch ) - install( + install( DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tipuesearch" - DESTINATION + DESTINATION "${CMAKE_DOCDIR_BASE}" ) - install( + install( DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/images" - DESTINATION + DESTINATION "${CMAKE_DOCDIR_BASE}" ) - install( + install( DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/css" - DESTINATION + DESTINATION "${CMAKE_DOCDIR_BASE}" ) diff --git a/documentation/additional_resources.rst b/documentation/additional_resources.rst index 8b657004..fa668a46 100644 --- a/documentation/additional_resources.rst +++ b/documentation/additional_resources.rst @@ -31,9 +31,6 @@ Additional Resources ---- -Tutorials -========= - Links ===== @@ -46,8 +43,8 @@ Links Videos ====== -**Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces (2012)** -******************************************************************************* +Feature Adaptive GPU Rendering of Catmull-Clark Subdivision Surfaces (2012) +*************************************************************************** .. raw:: html @@ -55,8 +52,8 @@ Videos -**Open Subdivision Technology Review (2012)** -********************************************* +Open Subdivision Technology Review (2012) +***************************************** .. raw:: html @@ -66,8 +63,8 @@ Videos First public demonstration of OpenSubdiv at Siggraph 2012. -**Autodesk User Group At Anaheim (2013)** -***************************************** +Autodesk User Group At Anaheim (2013) +************************************* .. raw:: html @@ -77,8 +74,8 @@ First public demonstration of OpenSubdiv at Siggraph 2012. Bill Polson, Director of Industry Strategy at Pixar Animation Studios -**Why Model with Subdivisions (2013)** -************************************** +Why Model with Subdivisions (2013) +********************************** .. raw:: html @@ -88,8 +85,8 @@ Bill Polson, Director of Industry Strategy at Pixar Animation Studios Ivo Kos, Modelling Technical Director at Pixar Animation Studios -**Meet the Experts: The OpenSubdiv Project (2013)** -*************************************************** +Meet the Experts: The OpenSubdiv Project (2013) +*********************************************** .. raw:: html diff --git a/documentation/api_overview.rst b/documentation/api_overview.rst index f4c72aea..3aace0a4 100644 --- a/documentation/api_overview.rst +++ b/documentation/api_overview.rst @@ -33,7 +33,7 @@ API Overview Architecture Overview ===================== -Because the OpenSubdiv software is intended to run on a variete of computing +Because the OpenSubdiv software is intended to run on a variety of computing resources, the API architecture has to accomodate a fairly complex matrix of interoperations. In order to achieve the requisite flexibility, the code structure is both layered and modular. @@ -53,57 +53,64 @@ processing costs of any given feature that is not used. ---- -Layers -====== +API Layers +========== -From a top-down point of view, OpenSubdiv is comprised of 3 layers : **Hbr**, -**Far** and **Osd**. +From a top-down point of view, OpenSubdiv is comprised of several layers, some +public, and some private. -.. image:: images/api_layers.png +Layers list in descending order: -The color groupings indicate inter-layer functional dependencies: + * **Osd** (OpenSubdiv) + * **Far** (Feature Adaptive Representation) + * **Vtr** (Vectorized Topological Representation) + * **Sdc** (Subdivision Core) - * Osd depends on Far, but not on Hbr - * Far depends on Hbr - * Hbr has no dependencies +Client mesh data enters the API through the Far layer. Typically, results will +be collected from the Osd layer. However, it is therefore possible to use +functionality from Far without introducing any dependency on Osd. -It is therefore possible to use functionality from Hbr without introducing any -dependency on either Far or Osd. +Although there are several entry-points to provide topology and primitive variable +data to OpenSubdiv, eventually everything must pass through the private Vtr and Sdc +representations for topological analysis. ----- +See `Using the Right Tools`_ for more in-depth coverage. -Representation vs. Implementation Layers -**************************************** - -One of the core performance goals of our subdivision algorithms is to leverage -interactive performance out of massively parallel code execution wherever -possible. In order to support a large diversity of discrete compute devices through -multiple dedicated SDKs, it is critical to distill the computations into the -smallest and simplest kernels possible. These can in turn be safely ported and -optimized for each of the hardware platforms. - -.. image:: images/api_representations.png - -This separation of general purpose against hardware-specific code is translated into -two types of layers : the **implementation** layer against the **representation** -layers. - ----- - -Data Flows -********** - -Data flows are mostly 1-directional, from top to bottom as a number of algorithms -are preparing the coarse mesh data to be refined and passing their results to -the next element in the processing chain. - -.. image:: images/api_data_flow.png +.. image:: images/api_layers_3_0.png :align: center ---- +Representation vs. Implementation Layers +======================================== + +One of the core performance goals of our subdivision algorithms is to leverage +interactive performance out of massively parallel code execution wherever +possible. In order to support a large diversity of compute architectures +it is critical to stream the geometric data to the compute kernels in the +most optimal way. + +Data structures that are efficient for topology analysis during the pre-computation +stage are not very good candidates for parallel processing. Our layered structure +reflects this requirement: topology analysis and other pre-computation tasks are +delegated to "representation" layers, while the actual execution of computations +has been moved to an "implementation" layer. + +.. image:: images/api_representations.png + +**Representation** layers are for general purpose algorithms and differenciated by +the requirements placed on data represenation. See `Multiple Representations`_ for +more details. + +The **Implementation** layer contains hardware and API-specific implementations. +In order to minimize code redundancy and bugs, we strive to reduce device-specific +computation logic to the most simplistic expression possible (in many cases as +simple as series of multiply-ads). + +---- + Multiple Representations -************************ +======================== The coarse mesh of a subdivision surface is represented by a collection of components that maintain relationships to each other. @@ -126,14 +133,14 @@ the very description of these connections (dependencies) between vertices. :align: center This is why OpenSubdiv provides specific representations for mesh data: - - Hbr is a half-edge relational representation - - Far is a serialized representation + - Vtr is a vectorized topology-only representation + - Far is a feature adaptive serialized representation A typical workflow would be to manipulate the topology in authoring applications, -maybe using Hbr meshes for common editing operations. Once the topology of the mesh -has stabilized, it is processed into a serialized form that can then be evaluated -at interactive framerates. The serialized form is embodied by Far, which can then -be migrated by the device-specific functions in Osd. +maybe using Hbr or a similar relational representation for common editing operations. +Once the topology of the mesh has stabilized, it is processed into a serialized form +that can then be evaluated at interactive framerates. The serialized form is +embodied by Far, which can then be migrated by device-specific functions in Osd. .. image:: images/api_workflows.png :align: center @@ -153,10 +160,56 @@ architecture: .. image:: images/osd_layers.png -Hbr serves both as an advanced topological description and the custodian of the -Catmull-Clark (and Loop) subdivision rules. Far is then used to leverage these -rules in order to produce serialized topological tables. +Vtr serves both as a private, efficient, intermediate topological description and +as the custodian of the Catmull-Clark (and Loop) subdivision rules. Far is used to +leverage these rules in order to produce serialized topological tables. The remaining computations have been reduced to extremely simple forms of interpolation, which can be dispatched to a variety of discrete computation platforms. + +---- + +Using the Right Tools +===================== + +OpenSubdiv's tiered interface offers a lot flexibility to make your application +both fast and robust. Because navigating through the large collection of classes and +features can be challenging, here is a flow-chart that should help sketch +the broad lines of going about using subdivisions in your application. + +General client application requirements: + ++----------------------+-------------------------------------------------------+ +| Surface Limit | For some applications, a polygonal approximation of | +| | the smooth surface is enough. Others require | +| | C :sup:`2` continuous differentiable bi-cubic patches | +| | (ex: deformable displacement mapping, smooth normals | +| | and semi-sharp creases...) | ++----------------------+-------------------------------------------------------+ +| Deforming Surface | Applications such as off-line image renderers often | +| | process a single frame at a time. Others, such as | +| | interactive games need to evaluate deforming | +| | character surface every frame. Because we can amortize| +| | many computations if the topology of the mesh does not| +| | change, OpenSubdiv provides 'stencil tables' in order | +| | to leverage subdivision refinement into a | +| | pre-computation step. | ++----------------------+-------------------------------------------------------+ +| Multi-threading | OpenSubdiv also provides dedicated interfaces to | +| | leverage parallelism on a wide variety of platforms | +| | and API standards, including both CPUs and GPUs. | ++----------------------+-------------------------------------------------------+ +| GPU Draw | If the application requires interactive drawing on | +| | screen, OpenSubdiv provides several back-end | +| | implementations, including D3D11 and OpenGL. These | +| | back-ends provide full support for programmable | +| | shading. | ++----------------------+-------------------------------------------------------+ + +Flow-chart: + +.. image:: images/osd_flow.png + :align: center + :target: images/osd_flow.png + diff --git a/documentation/cmake_build.rst b/documentation/cmake_build.rst index 619a4194..dc511708 100644 --- a/documentation/cmake_build.rst +++ b/documentation/cmake_build.rst @@ -1,26 +1,26 @@ -.. +.. Copyright 2013 Pixar - + Licensed under the Apache License, Version 2.0 (the "Apache License") with the following modification; you may not use this file except in compliance with the Apache License and the following modification to it: Section 6. Trademarks. is deleted and replaced with: - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4(c) of the License and to reproduce the content of the NOTICE file. - + You may obtain a copy of the Apache License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License. - + Building with Cmake ------------------- @@ -37,28 +37,29 @@ Information on how to build OpenSubdiv Overview ======== -Assuming that you have `cloned `__ the source repository +Assuming that you have `cloned `__ the source repository and selected an appropriate release branch, the following instructions will walk you through the Cmake and configuration and build process. Cmake is a cross-platform, open-source build system. Cmake controls the compilation -process using platform independent configuration files in order to generate +process using platform independent configuration files in order to generate makefiles and workspaces that are native to the platform of choice. The process involves the following steps: - 1. Locate & build the requisite dependencies - 2. Configure & run CMake to generate Makefiles / MSVC solution / XCode project - 3. Run the build from make / MSVC / XCode + + #. Locate & build the requisite dependencies + #. Configure & run CMake to generate Makefiles / MSVC solution / XCode project + #. Run the build from make / MSVC / XCode ---- Step 1: Dependencies ==================== -Cmake will adapt the build based on which dependencies have been successfully +Cmake will adapt the build based on which dependencies have been successfully discovered and will disable certain features and code examples accordingly. -Please refer to the documentation of each of the dependency packages for specific +Please refer to the documentation of each of the dependency packages for specific build and installation instructions. Required @@ -105,7 +106,7 @@ The following configuration arguments can be passed to the cmake command line. -DCMAKE_INSTALL_PREFIX=[base path to install OpenSubdiv (default: Current directory)] -DCMAKE_LIBDIR_BASE=[library directory basename (default: lib)] - + -DCUDA_TOOLKIT_ROOT_DIR=[path to CUDA] -DPTEX_LOCATION=[path to Ptex] -DGLEW_LOCATION=[path to GLEW] @@ -113,11 +114,11 @@ The following configuration arguments can be passed to the cmake command line. -DMAYA_LOCATION=[path to Maya] -DTBB_LOCATION=[path to Intel's TBB] -DICC_LOCATION=[path to Intel's C++ Studio XE] - + -DNO_LIB=1 // disable the opensubdiv libs build (caveat emptor) -DNO_EXAMPLES=1 // disable examples build + -DNO_TUTORIALS=1 // disable tutorials build -DNO_REGRESSION=1 // disable regression tests build - -DNO_PYTHON=1 // disable Python SWIG build -DNO_MAYA=1 // disable Maya plugin build -DNO_PTEX=1 // disable PTex support -DNO_DOC=1 // disable documentation build @@ -125,22 +126,19 @@ The following configuration arguments can be passed to the cmake command line. -DNO_TBB=1 // disable TBB -DNO_CUDA=1 // disable CUDA -DNO_OPENCL=1 // disable OpenCL + -DNO_OPENGL=1 // disable OpenGL -DNO_CLEW=1 // disable CLEW wrapper library - -DNO_GCD=1 // disable GrandCentralDispatch on OSX Environment Variables _____________________ -The paths to Maya, Ptex, GLFW, and GLEW can also be specified through the -following environment variables: +The paths to Maya, Ptex, GLFW, GLEW and other dependencies can also be specified +through the following environment variables: .. code:: c++ - MAYA_LOCATION - PTEX_LOCATION - GLFW_LOCATION - GLEW_LOCATION - + MAYA_LOCATION, PTEX_LOCATION, GLFW_LOCATION, GLEW_LOCATION + Automated Script ________________ @@ -159,7 +157,7 @@ time. Here is a typical workflow: Where *cmake_setup* is a configuration script. -Here is an example CMake configuration script for a full typical windows-based +Here is an example CMake configuration script for a full typical windows-based build that can be run in GitShell : .. code:: c++ @@ -184,12 +182,12 @@ build that can be run in GitShell : \cp -f c:/Users/opensubdiv/demo/src/zlib-1.2.7/contrib/vstudio/vc10/x64/ZlibDllRelease/zlibwapi.dll bin/Release/ \cp -f c:/Users/opensubdiv/demo/src/ptex/x64/lib/Ptex.dll bin/Debug/ \cp -f c:/Users/opensubdiv/demo/src/ptex/x64/lib/Ptex.dll bin/Release/ - + .. container:: impnotip * **Important** - Notice that the following scripts start by **recursively removing** the *../build/* and + Notice that the following scripts start by **recursively removing** the *../build/* and *../inst/* directories. Make sure you modify them to suit your build workflow. Here is a similar script for \*Nix-based platforms: @@ -224,7 +222,7 @@ Here is a similar script for OSX: Using Intel's C++ Studio XE ___________________________ -OpenSubdiv can be also be built with `Intel's C++ compiler `__ +OpenSubdiv can be also be built with `Intel's C++ compiler `__ (icc). The default compiler can be overriden in CMake with the following configuration options: .. code:: c++ @@ -263,14 +261,14 @@ CMake provides a cross-platform command-line build: Alternatively, you can native toolkits to launch the build. The steps differ for each OS: - * *Windows* : + * *Windows* : launch VC++ with the solution generated by cmake in your build directory. - * *OSX* : + * *OSX* : run *make* in the build directory - * *\*Nix* : - | run *make* in your build directory + * *\*Nix* : + | run *make* in your build directory | - use the *clean* target to remove previous build results | - use *VERBOSE=1* for verbose build output @@ -279,10 +277,10 @@ Alternatively, you can native toolkits to launch the build. The steps differ for **Note** We recommend against using CMake's Xcode project generator (-G "Xcode") on OSX, as it seems to generate some dependencies incorrectly. We recommend instead reverting to Makefiles on OSX, and - launching *make*, instead of *xcodebuild* to execute the build (make sure to install the command + launching *make*, instead of *xcodebuild* to execute the build (make sure to install the command line tools in Xcode) - + ---- Build Targets @@ -290,7 +288,7 @@ _____________ Makefile-based builds allow the use of named target. Here are some of the more useful target names: - + *osd_\_\* | The core components of the OpenSubdiv libraries | @@ -298,7 +296,7 @@ useful target names: *\* | Builds specific code examples by name (glViewer, ptexViewer...) | - + *doc* | Builds ReST and doxygen documentation | diff --git a/documentation/code_examples.rst b/documentation/code_examples.rst index fb1f39cb..19004105 100644 --- a/documentation/code_examples.rst +++ b/documentation/code_examples.rst @@ -38,39 +38,26 @@ of the software. :widths: 50 50 * - | `glViewer `_ - | `glBatchViewer `_ - | `glStencilViewer `_ - - | `limitEval `_ - | `paintTest `_ - | `ptexViewer `_ - | `uvViewer `_ + | `glPtexViewer `_ + | `glEvalLimit `_ + - | `glStencilViewer `_ + | `glPaintTest `_ + | `glShareTopology `_ + | `glFVarViewer `_ .. list-table:: **DirectX examples** :class: quickref :widths: 50 50 * - | `dxViewer `_ - - | + - | `dxPtexViewer `_ .. list-table:: **Plugin examples** :class: quickref - :widths: 50 50 + :widths: 50 * - | `osdPolySmooth `_ - | `mayaViewer `_ - - | `mayaPtexViewer `_ -| - -.. container:: notebox - - **Note:** - the mayaViewer and mayaPtexViewer plugins are currently unsupported and they - may fail to compile or work with current versions of OpenSubdiv. These were - originally written for the sole purpose of live demonstrations and the code - is provided only as an implementation example. - -| ---- diff --git a/documentation/css/flavor.css b/documentation/css/flavor.css index bfe41f86..fa7b220b 100644 --- a/documentation/css/flavor.css +++ b/documentation/css/flavor.css @@ -1,149 +1,155 @@ -/* +/* Copyright 2013 Pixar - + Licensed under the Apache License, Version 2.0 (the "Apache License") with the following modification; you may not use this file except in compliance with the Apache License and the following modification to it: Section 6. Trademarks. is deleted and replaced with: - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4(c) of the License and to reproduce the content of the NOTICE file. - + You may obtain a copy of the Apache License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License. -*/ +*/ /* Basic Styles ________________________*/ body { - background: #000 url("../images/studio-tools.png") no-repeat; + background: #000 url("../images/studio-tools.png") no-repeat; } a { - color: #FFCC03; + color: #FFCC03; } a:visited { } a:hover { - color: #fff; + color: #fff; } a:active { - color: #FFCC03; + color: #FFCC03; } .center { - width: 944px; - margin:0 auto; - display:block!important; + width: 944px; + margin:0 auto; + display:block!important; } .noBullets { - list-style-type:none; + list-style-type:none; } .center ul li { - list-style-type: none; - padding-left: 15px; + list-style-type: none; + padding-left: 15px; } ol { - margin: 0 0 0 28px; - padding: 0; - background:none; + margin: 0 0 0 28px; + padding: 0; + background:none; } ol li { - list-style-type: decimal-leading-zero; - font-weight: bold; - font-size: 14px!important; - color: #CCC!important; + list-style-type: decimal; + font-weight: bold; + font-size: 14px!important; + color: #CCC!important; } ol li h3 { - font-size:20px!important; - color: #ccc!important; + font-size:20px!important; + color: #ccc!important; } ol li p { - font-size: 13px!important; - font-weight:normal!important; - color: #999!important; + font-size: 13px!important; + font-weight:normal!important; + color: #999!important; } p.fine-print { - font-size: 9px!important; + font-size: 9px!important; } .noBullets { - list-style-type:none; + list-style-type:none; } #mainContentContainer { - width: 944px; - padding-bottom: 20px; - margin: 10px 0 0px; - border: 1px solid #666; - border-radius : 7px; - -moz-border-radius : 7px; - -webkit-border-radius: 7px; - color: #CCCCCC; - background-color: #2C2C2C; - float:left; - position:relative; + width: 944px; + padding-bottom: 20px; + margin: 10px 0 0px; + border: 1px solid #666; + border-radius : 7px; + -moz-border-radius : 7px; + -webkit-border-radius: 7px; + color: #CCCCCC; + background-color: #2C2C2C; + float:left; + position:relative; } .marginL0 { - margin-left:0!important; + margin-left:0!important; } .paddingL0 { - padding-left:0!important + padding-left:0!important } #mainFooterContainer { - width: 944px; - margin: 0 auto 0; - color: #CCCCCC; + width: 944px; + margin: 0 auto 0; + color: #CCCCCC; } h2.title { - margin-bottom: 10px; - color: #CCC; - line-height: 26px; - margin-top: 20px; + margin-bottom: 10px; + color: #CCC; + line-height: 26px; + margin-top: 20px; } h1.title { - float: left; - padding-left: 25px; - padding-right: 25px; + float: left; + padding-left: 25px; + padding-right: 25px; } .floatLeft { - float:left!important; + float:left!important; } h1.title, h1 { - margin: 20px 0 10px; + margin: 20px 0 10px; } #mainContentContainer h1, #mainContentContainer h2, #mainContentContainer h3, #mainContentContainer h4, #mainContentContainer h5, #mainFooterContainer h1, #mainFooterContainer h2, #mainFooterContainer h3, #mainFooterContainer h4, #mainFooterContainer h5 { - font-weight:lighter; + font-weight:lighter; } #mainContentContainer h1, #mainFooterContainer h1 { - font-size: 38px; - line-height: 35px; - margin-bottom:10px; + font-size: 38px; + line-height: 35px; + margin-bottom:10px; } #mainContentContainer h2, #mainFooterContainer h2 { - font-size: 26px; - margin-bottom:5px; + font-size: 26px; + margin-bottom:5px; } #mainContentContainer h3, #mainFooterContainer h3 { - font-size:20px; - clear: left; - line-height: 23px; - margin-bottom:0; + font-size:20px; + font-weight:bold; + clear: left; + line-height: 23px; + margin-bottom:0; } -#mainFooterContainer h4 { - margin: 10px 0 5px; +#mainContentContainer h4, #mainFooterContainer h4 { + font-size:18px; + margin: 10px 15px 5px; +} +#mainContentContainer h5, #mainFooterContainer h5 { + font-size:16px; + margin: 10px 15px 5px; } ul.creatorFooterNav li { - background: none; - display: inline-block; - float: left; - padding: 0; - font-size: 16px; + background: none; + display: inline-block; + float: left; + padding: 0; + font-size: 16px; } /* Table Styles @@ -151,352 +157,352 @@ ________________________*/ table { } table a { - color:#00ccff + color:#00ccff } td { } #mainContentContainer p { - color: #999999; - font-size: 13px; - line-height: 18px; - margin-top: 5px; - margin-right: 0; - margin-bottom: 15px; - margin-left: 15px; + color: #999999; + font-size: 13px; + line-height: 18px; + margin-top: 5px; + margin-right: 0; + margin-bottom: 15px; + margin-left: 15px; } #mainContentContainer li { - color: #999; - font-size: 12px; - line-height:14px; - margin: 5px 0; + color: #999; + font-size: 12px; + line-height:14px; + margin: 5px 0; } #mainFooterContainer p { - color: #999; - font-size: 12px; - line-height: 16px; - margin: 0 0 5px 0; + color: #999; + font-size: 12px; + line-height: 16px; + margin: 0 0 5px 0; } #mainFooterContainer a.readMore { - font-size:12px; + font-size:12px; } ul.creatorFooterNav { - float: left; - margin: 0; - border:none; + float: left; + margin: 0; + border:none; } ul.creatorFooterNav li a { - color: #666666; - text-decoration: none; - margin-left:10px; - float:left; - padding: 20px 10px!important; + color: #666666; + text-decoration: none; + margin-left:10px; + float:left; + padding: 20px 10px!important; } ul.creatorFooterNav li a:hover, a h4:hover { - color:#fff; + color:#fff; } ul.creatorFooterNav li.creatorMainNavActive a, ul.creatorFooterNav li a:active, a h4:active { - color:#FFCC03; + color:#FFCC03; } .headerColor { - background: none; - border-bottom: medium none; - color:#606060; + background: none; + border-bottom: medium none; + color:#606060; } a.logo { - float: left; - margin:-35px 0px 0px 20px; - padding: 0px 0px 0px 0px; + float: left; + margin:-35px 0px 0px 20px; + padding: 0px 0px 0px 0px; } .featuredSynopsis h3 { - color:#ccc; - margin: 5px 0!important; + color:#ccc; + margin: 5px 0!important; } .featuredSynopsis a.targetUrl h3 { - color:#ccc; - margin: 5px 0!important; + color:#ccc; + margin: 5px 0!important; } .featuredSynopsis a.targetUrl h3:hover { - color:#fff; + color:#fff; } .featuredSynopsis a.targetUrl h3:active { - color:#FFCC03; + color:#FFCC03; } /*Pixar Align Styles ________________________*/ .paddingL0 { - padding-left:0; + padding-left:0; } .paddingR0 { - padding-right:0; + padding-right:0; } .padding20 { - padding:20px; + padding:20px; } .padding15 { - padding:15px; + padding:15px; } .paddingL25 { - padding-left:25px!important; + padding-left:25px!important; } .paddingR25 { - padding-right:25px!important; + padding-right:25px!important; } .paddingLR25 { - padding-left:25px!important; - padding-right:25px!important; + padding-left:25px!important; + padding-right:25px!important; } .paddingLR10 { - padding-left:10px!important; - padding-right:10px!important; + padding-left:10px!important; + padding-right:10px!important; } .paddingNone ul { - padding-right:0!important; - padding-left:0!important; + padding-right:0!important; + padding-left:0!important; } .paddingB50 { - padding-bottom:50px; + padding-bottom:50px; } .width300 { - width:300px!important; + width:300px!important; } .marginTB10 { - margin-top:10px!important; - margin-bottom:10px!important; + margin-top:10px!important; + margin-bottom:10px!important; } .marginTB0 { - margin-top:0px!important; - margin-bottom:0px!important; + margin-top:0px!important; + margin-bottom:0px!important; } .marginT10 { - margin-top:10px; + margin-top:10px; } .marginT20 { - margin-top:20px; + margin-top:20px; } .marginT15 { - margin-top:15px; + margin-top:15px; } .marginT10 { - margin-top:10px; + margin-top:10px; } .marginT5 { - margin-top:5px; + margin-top:5px; } .marginL20 { - margin-left:20px!important; + margin-left:20px!important; } .marginL100 { - margin-top:100px; + margin-top:100px; } .setWidth { - width:944px; + width:944px; } .setTextHeight { - height:150px; + height:150px; } .setTextHeightCustom { - height:328px; + height:328px; } .marginR10 { - margin-right:10px; + margin-right:10px; } .marginR15 { - margin-right:15px; + margin-right:15px; } .marginR20 { - margin-right:20px; + margin-right:20px; } marginLR25 { - margin-left:25px; - margin-right:25px; + margin-left:25px; + margin-right:25px; } .marginL50 { - margin-left:50px; + margin-left:50px; } .marginL125 { - margin-left: 125px; + margin-left: 125px; } .marginT5 { - margin-top: 5px; + margin-top: 5px; } .marginT75 { - margin-top: 75px; + margin-top: 75px; } .marginT50 { - margin-top: 50px; + margin-top: 50px; } .marginT52 { - margin-top: 52px; + margin-top: 52px; } .marginT62 { - margin-top: 62px; + margin-top: 62px; } .marginT60 { - margin-top: 60px; + margin-top: 60px; } .marginT30 { - margin-top: 30px; + margin-top: 30px; } .marginT40 { - margin-top: 40px; + margin-top: 40px; } .marginB20 { - margin-bottom: 20px!important; + margin-bottom: 20px!important; } .marginB40 { - margin-bottom:40px; + margin-bottom:40px; } .padding10 { - padding:10px; + padding:10px; } .marginT25 { - margin-top:25px; + margin-top:25px; } .marginB0 { - margin-bottom:0!important; + margin-bottom:0!important; } .paddingB0 { - padding-bottom:0!important; + padding-bottom:0!important; } .buttonPaddingRegister { - padding:20px 15px; + padding:20px 15px; } .height350 { - height:350px; + height:350px; } .dateStamp { - color: #00CCFF; - font-size: 13px; - font-style: normal; - font-weight: normal; - padding: 0; + color: #00CCFF; + font-size: 13px; + font-style: normal; + font-weight: normal; + padding: 0; } .featuredSynopsis .dateStamp { - margin-top: 30px; + margin-top: 30px; } .copyrightText { - position:absolute; - right:10px; - bottom:5px; - color:#fff; - font-size:10px; - opacity:.5; - text-align: right; + position:absolute; + right:10px; + bottom:5px; + color:#fff; + font-size:10px; + opacity:.5; + text-align: right; } /*Pixar Main Nav Styles ________________________*/ #mainSiteNavigation { - float: left; - padding: 7px 0 0; - width: 944px; - background: none; - color: #CCCCCC; - border-bottom: 1px solid #666666; + float: left; + padding: 7px 0 0; + width: 944px; + background: none; + color: #CCCCCC; + border-bottom: 1px solid #666666; } #mainSiteNavigation .creatorMainNav { - margin: 4px 10px 10px 10px; - padding: 0px; + margin: 4px 10px 10px 10px; + padding: 0px; } #mainSiteNavigation .creatorMainNav li { - padding: 0px; - margin: 8px 15px; - background:none; - font-size: 14px; + padding: 0px; + margin: 8px 15px; + background:none; + font-size: 14px; } #mainSiteNavigation .creatorMainNav li a { - color: #9a9a9a; - letter-spacing: 1px; - text-decoration: none; - font-size: 14px; + color: #9a9a9a; + letter-spacing: 1px; + text-decoration: none; + font-size: 14px; } #mainSiteNavigation .creatorMainNav li a:hover { - color: #ffffff; + color: #ffffff; } #mainSiteNavigation .creatorMainNav li a:active { - color: #FFCC03; + color: #FFCC03; } #mainSiteNavigation .creatorMainNav li.creatorMainNavActive a { - color: #FFCC03; + color: #FFCC03; } a.readMore { - font-size:14px; - color:#666; + font-size:14px; + color:#666; } a.readMore:hover { - color:#fff!important; + color:#fff!important; } a.readMore:active { - color:#ffcc03!important + color:#ffcc03!important } /*Pixar Logo Styles ________________________*/ div.homeRenderManLink { - float: left; - height: 45px; - margin: 0 0px 0 5px; - width: 300px; - color: #999; - font-size: 32px; - font-family: Futura, Arial, Helvetica, sans-serif; - text-indent: 10px; + float: left; + height: 45px; + margin: 0 0px 0 5px; + width: 300px; + color: #999; + font-size: 32px; + font-family: Futura, Arial, Helvetica, sans-serif; + text-indent: 10px; } div.homeRenderManLinkWide { - float: left; - height: 45px; - margin: 0 0px 0 5px; - width: 900px; - color: #999; - font-size: 32px; - font-family: Futura, Arial, Helvetica, sans-serif; - text-indent: 10px; + float: left; + height: 45px; + margin: 0 0px 0 5px; + width: 900px; + color: #999; + font-size: 32px; + font-family: Futura, Arial, Helvetica, sans-serif; + text-indent: 10px; } div.homeRenderManLink a { - color: #999; + color: #999; } div.homeRenderManLink a:hover { - /*background-position:-178px 0;*/ + /*background-position:-178px 0;*/ } .blueButton { - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border: 1px solid black; - background: #F8C600; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; + border: 1px solid black; + background: #F8C600; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#204D79', endColorstr='#003260'); - background: -webkit-gradient(linear, left top, left bottom, from(#204D79), to(#003260)); - background: -moz-linear-gradient(bottom, #003260, #204D79); - box-shadow: 0 1px 0px #3471aa inset; - -webkit-box-shadow: 0 1px 0px #3471aa inset; - -moz-box-shadow: 0 1px 0 #3471aa inset; - color: #ccc!important; - float: right; - font-size: 11px; - font-weight: bold; - text-shadow: 0 1px 0 black; - text-transform: uppercase; - padding: 7px 0; - width: 115px; - text-align: center; + background: -webkit-gradient(linear, left top, left bottom, from(#204D79), to(#003260)); + background: -moz-linear-gradient(bottom, #003260, #204D79); + box-shadow: 0 1px 0px #3471aa inset; + -webkit-box-shadow: 0 1px 0px #3471aa inset; + -moz-box-shadow: 0 1px 0 #3471aa inset; + color: #ccc!important; + float: right; + font-size: 11px; + font-weight: bold; + text-shadow: 0 1px 0 black; + text-transform: uppercase; + padding: 7px 0; + width: 115px; + text-align: center; } .blueButton:hover { - color: #ccc!important; - background: #f8c600; + color: #ccc!important; + background: #f8c600; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#275d8e', endColorstr='#003d72'); - background: -webkit-gradient(linear, left top, left bottom, from(#275d8e), to(#003d72)); - background: -moz-linear-gradient(bottom, #003d72, #275d8e); - cursor:pointer; + background: -webkit-gradient(linear, left top, left bottom, from(#275d8e), to(#003d72)); + background: -moz-linear-gradient(bottom, #003d72, #275d8e); + cursor:pointer; } .blueButton:active { - color:#fff!important; - background: #000; + color:#fff!important; + background: #000; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#002345', endColorstr='#204D79'); - background: -webkit-gradient(linear, left top, left bottom, from(#002345), to(#204D79)); - background: -moz-linear-gradient(bottom, #204D79, #002345); - box-shadow: 0px 1px 0px #444; - -webkit-box-shadow: 0px 1px 0px #444; - -moz-box-shadow: 0px 1px 0px #444; + background: -webkit-gradient(linear, left top, left bottom, from(#002345), to(#204D79)); + background: -moz-linear-gradient(bottom, #204D79, #002345); + box-shadow: 0px 1px 0px #444; + -webkit-box-shadow: 0px 1px 0px #444; + -moz-box-shadow: 0px 1px 0px #444; } @@ -504,264 +510,264 @@ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#002345', endC ________________________*/ #homeSlider { - clear: left; - float: left; - height: 420px; - margin-bottom: -21px; + clear: left; + float: left; + height: 420px; + margin-bottom: -21px; } #lofslidecontent-home .lof-slidecontent, #lofslidecontent-home .lof-slidecontent a { - color:#FFF; + color:#FFF; } #lofslidecontent-home .lof-slidecontent { - position:absolute; - overflow:hidden; + position:absolute; + overflow:hidden; } #lofslidecontent-home .lof-main-outer { - position:relative; - height:100%; - width:980px; - z-index:3px; - overflow:hidden; + position:relative; + height:100%; + width:980px; + z-index:3px; + overflow:hidden; } #lofslidecontent-home .lof-main-outer-small { - position:relative; - height:100%; - width:980px; - z-index:3px; - overflow:hidden; + position:relative; + height:100%; + width:980px; + z-index:3px; + overflow:hidden; } #lofslidecontent-home ul.lof-main-wapper li { - overflow:hidden; - padding:0px; - margin:1px; - float:left; - position:relative; - height: 420px; + overflow:hidden; + padding:0px; + margin:1px; + float:left; + position:relative; + height: 420px; } #lofslidecontent-home ul.lof-main-wapper li img { - padding:0; + padding:0; } #lofslidecontent-home .options { - width: 300px; - background: rgba(23, 23, 23, 0.75); - border: 1px solid rgba(0, 0, 0, 0.25); - padding: 10px; - position: absolute; - top: 20%; - left: 20px; - z-index: 9; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - -ms-border-radius: 10px; - border-radius: 10px; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); - -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); - -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); - -ms-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); + width: 300px; + background: rgba(23, 23, 23, 0.75); + border: 1px solid rgba(0, 0, 0, 0.25); + padding: 10px; + position: absolute; + top: 20%; + left: 20px; + z-index: 9; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + -ms-border-radius: 10px; + border-radius: 10px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); + -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); + -ms-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); } #lofslidecontent-home .options-banner { - top: 0px; - left: 0px; - margin-top: 325px; - height: 90px; - width: 942px; - background: #000; - box-shadow: 0; - -webkit-box-shadow: 0; - border: 1px solid rgba(0, 0, 0, 0.25); - padding: 10px; - position: absolute; - z-index: 9; - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - -ms-border-radius: 10px; - border-radius: 10px; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); - -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); - -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); - -ms-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); + top: 0px; + left: 0px; + margin-top: 325px; + height: 90px; + width: 942px; + background: #000; + box-shadow: 0; + -webkit-box-shadow: 0; + border: 1px solid rgba(0, 0, 0, 0.25); + padding: 10px; + position: absolute; + z-index: 9; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + -ms-border-radius: 10px; + border-radius: 10px; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); + -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); + -ms-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.75); } .options-banner h2 { - margin-left: 10px; + margin-left: 10px; } .options-banner p { - margin-top: 10px!important; - margin-left: 10px!important; + margin-top: 10px!important; + margin-left: 10px!important; } #lofslidecontent-home .copyright { - font-size: 11px; - font-weight:bold; - color:#fff; - bottom:5px; - left:30px; - z-index: 70; - position: absolute; + font-size: 11px; + font-weight:bold; + color:#fff; + bottom:5px; + left:30px; + z-index: 70; + position: absolute; } #lofslidecontent-home ul.lof-main-wapper { - overflow:hidden; - padding:0px; - margin:0; - position:absolute; - overflow:hidden; + overflow:hidden; + padding:0px; + margin:0; + position:absolute; + overflow:hidden; } #mainContent, .mainContent { - float:left; - width: 550px; - padding-bottom: 20px; + float:left; + width: 550px; + padding-bottom: 20px; } #mainContent h3, .mainContent h3 { - margin-top: 0; + margin-top: 0; } /*Pixar Press Section Styles ________________________*/ .copyrightFooter { - color: #666; - float: right; - font-size: 11px; - margin-right: 10px; - margin-top: 25px; + color: #666; + float: right; + font-size: 11px; + margin-right: 10px; + margin-top: 25px; } div.articleSynopsis p { - padding: 0px 25px; - margin: 0 0 10px; + padding: 0px 25px; + margin: 0 0 10px; } h4.synopsis-head { - font-size: 16px; - font-weight: bold; - line-height: 1.3em; - margin: 10px 0 5px 3px; + font-size: 16px; + font-weight: bold; + line-height: 1.3em; + margin: 10px 0 5px 3px; } h1.articleContentTitle { - font-size: 38px; - float: left; - font-weight: lighter; - margin-top: 35px; - padding: 0px 25px; - width: 95%; - line-height: 40px!important; + font-size: 38px; + float: left; + font-weight: lighter; + margin-top: 35px; + padding: 0px 25px; + width: 95%; + line-height: 40px!important; } h1.articleContentTitle a { - float:left; - margin-right: 5px; - font-size:38px; + float:left; + margin-right: 5px; + font-size:38px; } h1.articleContentTitle span { - float:left; - font-size:38px; + float:left; + font-size:38px; } h2.articleContentTitle { - font-size: 24px; - float: left; - font-weight: lighter; - margin-top: 20px; - padding: 0px 10px; - width: 95%; - line-height: 1.6em!important; + font-size: 24px; + float: left; + font-weight: lighter; + margin-top: 20px; + padding: 0px 10px; + width: 95%; + line-height: 1.6em!important; } h2.articleContentTitle a { - float:left; - margin-right: 5px; - font-size:24px; + float:left; + margin-right: 5px; + font-size:24px; } h2.articleContentTitle span { - float:left; - font-size:24px; + float:left; + font-size:24px; } /*Pixar Footer Styles ________________________*/ #footerLeftEntriesForSection, #footerCenterEntriesForSection, #footerRightEntriesForSection { - float: left; - margin: 20px 0 25px 23px; - width: 285px; + float: left; + margin: 20px 0 25px 23px; + width: 285px; } #footerLeftEntriesForSection h4, #footerCenterEntriesForSection h4, #footerRightEntriesForSection h4 { - text-transform:uppercase; + text-transform:uppercase; } #footerLeftEntriesForSection ul, #footerCenterEntriesForSection ul, #footerRightEntriesForSection ul { - float:left; - display:inline-block; - list-style-type:none; - margin: 0; - padding: 0; + float:left; + display:inline-block; + list-style-type:none; + margin: 0; + padding: 0; } #footerLeftEntriesForSection ul li, #footerCenterEntriesForSection ul li, #footerRightEntriesForSection ul li { - float:left; - margin: 0; - padding: 0 0 10px 0; - display:inline-block; - list-style-type:none; - background: none; - width: 285px; + float:left; + margin: 0; + padding: 0 0 10px 0; + display:inline-block; + list-style-type:none; + background: none; + width: 285px; } .featuredSynopsis h3.title, h3.simpleLinkContainer { - margin: 5px 0; - padding:0; + margin: 5px 0; + padding:0; } .featuredSynopsis-schedule h3.title { - margin-top: 20px; - color: #e0e0e0; + margin-top: 20px; + color: #e0e0e0; } h3.title { - color: 00CCFF; + color: 00CCFF; } /*Pixar Video Page Styles ________________________*/ .featuredSynopsis { - float: left; - margin: 0 0 0px; + float: left; + margin: 0 0 0px; } .featuredSynopsis-schedule { - margin: 0 0 0px; + margin: 0 0 0px; } .borderTop { - border-top:1px solid #666; - margin-top: 20px; - padding-top: 20px; - margin-bottom: 0; + border-top:1px solid #666; + margin-top: 20px; + padding-top: 20px; + margin-bottom: 0; } .featuredSynopsisWide { - float: left; - width: 896px; - margin: 0 0 20px; - border-top: 1px solid #666666; + float: left; + width: 896px; + margin: 0 0 20px; + border-top: 1px solid #666666; } .featuredSynopsisWide .ogImage { - float: right; - margin-top: 30px; - margin-left: 30px; + float: right; + margin-top: 30px; + margin-left: 30px; } th { - text-align:left; + text-align:left; } /*Pixar Color Styles ________________________*/ .footerColor a { - color: #cccccc; + color: #cccccc; } .footerColor { background-color: #2C2C2C; - margin: 20px 0 0 0; - border: 1px solid #666; - -moz-border-radius : 7px; - -webkit-border-radius: 7px; - height: 265px; + margin: 20px 0 0 0; + border: 1px solid #666; + -moz-border-radius : 7px; + -webkit-border-radius: 7px; + height: 265px; } hr { - background-color: #666666; - border: 0 none; - clear: both; - color: #666666; - float: left; - height: 1px; - margin: 15px 25px 15px 25px; - width: 894px; + background-color: #666666; + border: 0 none; + clear: both; + color: #666666; + float: left; + height: 1px; + margin: 15px 25px 15px 25px; + width: 894px; } @@ -770,175 +776,175 @@ ________________________*/ pre, code { - border: 1px dashed #555555; - background:#222; - padding: 5px 10px; - line-height: 21px; - word-wrap:break-word; - text-align: left; - width: 96%; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; + border: 1px dashed #555555; + background:#222; + padding: 5px 10px; + line-height: 21px; + word-wrap:break-word; + text-align: left; + width: 96%; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; } .code-keyword { - color:#036eff; + color:#036eff; } .code-quote { - color:#13db03; + color:#13db03; } .code-object { - color:#e403ff; + color:#e403ff; } .entranceList ul { - padding:0 25px; + padding:0 25px; } .entranceList li { - background: #222222; - border: 1px solid #000000; - -moz-box-shadow: 0 1px 0 #555555 inset; - -webkit-box-shadow: 0 1px 0 #555555 inset; - float: left; - margin: 0px 15px 30px!important; - position:relative; - padding: 1px; - width: 45%; + background: #222222; + border: 1px solid #000000; + -moz-box-shadow: 0 1px 0 #555555 inset; + -webkit-box-shadow: 0 1px 0 #555555 inset; + float: left; + margin: 0px 15px 30px!important; + position:relative; + padding: 1px; + width: 45%; } .entranceList li:hover { - background:#333; + background:#333; } .entranceList li:hover h3 { - color:#fff!important; + color:#fff!important; } .entranceList li h3 { - clear:none!important; + clear:none!important; } .entranceList li:active h3 { - color: #FFCC03!important; + color: #FFCC03!important; } .entranceList li img { - height:100px; - width:100px; - border-right: 1px solid #000000; - float:left; + height:100px; + width:100px; + border-right: 1px solid #000000; + float:left; } .entranceList li h3 { - float: left; - margin: 10px 0px 0 15px!important; - width: 70%; + float: left; + margin: 10px 0px 0 15px!important; + width: 70%; } .entranceList li div.synopsis div.news-author p { - float: left; - line-height: 16px !important; - margin: 5px 0 0 15px !important; - width: 70%; + float: left; + line-height: 16px !important; + margin: 5px 0 0 15px !important; + width: 70%; } .entranceList li div.synopsis p { - float: left!important; + float: left!important; } div.news-author { - font-style:italic; + font-style:italic; } div.news-author:before { - content: "-"; + content: "-"; } .entranceList li a.clickableDiv { - height: 105px; - left: 0; - position: absolute; - top: 0; - width: 412px; + height: 105px; + left: 0; + position: absolute; + top: 0; + width: 412px; } .entranceList ul li { - background:#222!important; - padding: 0; + background:#222!important; + padding: 0; } .hidden, .displayNone { - display:none; + display:none; } .button { - border: 1px solid black; - background: #111; + border: 1px solid black; + background: #111; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#000000'); - background: -webkit-gradient(linear, left top, left bottom, from(#333333), to(#000)); - background: -moz-linear-gradient(bottom, #000, #333333); - box-shadow: 0 1px 0px #666 inset; - -webkit-box-shadow: 0 1px 0px #666 inset; - -moz-box-shadow: 0 1px 0 #666 inset; - color: #ccc; - float:left; - min-width:90px; - font-size: 11px; - font-weight: bold; - text-shadow: 0 1px 0 black; - text-transform: uppercase; - padding: 10px; - text-align: center; + background: -webkit-gradient(linear, left top, left bottom, from(#333333), to(#000)); + background: -moz-linear-gradient(bottom, #000, #333333); + box-shadow: 0 1px 0px #666 inset; + -webkit-box-shadow: 0 1px 0px #666 inset; + -moz-box-shadow: 0 1px 0 #666 inset; + color: #ccc; + float:left; + min-width:90px; + font-size: 11px; + font-weight: bold; + text-shadow: 0 1px 0 black; + text-transform: uppercase; + padding: 10px; + text-align: center; } .blueButton { - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - border: 1px solid black; - background: #F8C600; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border: 1px solid black; + background: #F8C600; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#204D79', endColorstr='#003260'); - background: -webkit-gradient(linear, left top, left bottom, from(#204D79), to(#003260)); - background: -moz-linear-gradient(bottom, #003260, #204D79); - box-shadow: 0 1px 0px #3471aa inset; - -webkit-box-shadow: 0 1px 0px #3471aa inset; - -moz-box-shadow: 0 1px 0 #3471aa inset; - color: #ccc; - float: right; - font-size: 11px; - font-weight: bold; - text-shadow: 0 1px 0 black; - text-transform: uppercase; - padding: 7px 0; - width: 115px; - text-align: center; + background: -webkit-gradient(linear, left top, left bottom, from(#204D79), to(#003260)); + background: -moz-linear-gradient(bottom, #003260, #204D79); + box-shadow: 0 1px 0px #3471aa inset; + -webkit-box-shadow: 0 1px 0px #3471aa inset; + -moz-box-shadow: 0 1px 0 #3471aa inset; + color: #ccc; + float: right; + font-size: 11px; + font-weight: bold; + text-shadow: 0 1px 0 black; + text-transform: uppercase; + padding: 7px 0; + width: 115px; + text-align: center; } .blueButton:hover { - background: #f8c600; /* for non-css3 browsers */ + background: #f8c600; /* for non-css3 browsers */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#275d8e', endColorstr='#003d72'); /* for IE */ - background: -webkit-gradient(linear, left top, left bottom, from(#275d8e), to(#003d72)); /* for webkit browsers */ - background: -moz-linear-gradient(bottom, #003d72, #275d8e); /* for firefox 3.6+ */ - cursor:pointer; + background: -webkit-gradient(linear, left top, left bottom, from(#275d8e), to(#003d72)); /* for webkit browsers */ + background: -moz-linear-gradient(bottom, #003d72, #275d8e); /* for firefox 3.6+ */ + cursor:pointer; } .blueButton:active { - color:#fff; - background: #000; /* for non-css3 browsers */ + color:#fff; + background: #000; /* for non-css3 browsers */ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#002345', endColorstr='#204D79'); /* for IE */ - background: -webkit-gradient(linear, left top, left bottom, from(#002345), to(#204D79)); /* for webkit browsers */ - background: -moz-linear-gradient(bottom, #204D79, #002345); /* for firefox 3.6+ */ - box-shadow: 0px 1px 0px #444; - -webkit-box-shadow: 0px 1px 0px #444; - -moz-box-shadow: 0px 1px 0px #444; + background: -webkit-gradient(linear, left top, left bottom, from(#002345), to(#204D79)); /* for webkit browsers */ + background: -moz-linear-gradient(bottom, #204D79, #002345); /* for firefox 3.6+ */ + box-shadow: 0px 1px 0px #444; + -webkit-box-shadow: 0px 1px 0px #444; + -moz-box-shadow: 0px 1px 0px #444; } .margin0 { - margin:0; + margin:0; } .padding0 { - padding:0; + padding:0; } .width944 { - width:944px; + width:944px; } .width450 { - width:450px; + width:450px; } .width475 { - width:475px; + width:475px; } .width500 { - width:500px; + width:500px; } .paddingLR20 { - padding-left:20px; - padding-right:20px; + padding-left:20px; + padding-right:20px; } .mediaTile td { - border-bottom: 1px solid #222; - border-top: 1px solid #333; - margin: 0; - padding: 15px 0 0; + border-bottom: 1px solid #222; + border-top: 1px solid #333; + margin: 0; + padding: 15px 0 0; } .clickableBox { diff --git a/documentation/css/renderman-university.css b/documentation/css/renderman-university.css index 7a87f95e..05b9ecf8 100644 --- a/documentation/css/renderman-university.css +++ b/documentation/css/renderman-university.css @@ -52,7 +52,7 @@ } .coursewareBackground ul li { padding-left: 6px!important; - list-style-type:square!important; + list-style-type:disc!important; } .coursewareBackground h1, .coursewareBackground h2, .coursewareBackground h1 a, .coursewareBackground h2 a { padding-bottom:10px; diff --git a/documentation/css/rst.css b/documentation/css/rst.css index fb978ed5..64e54f19 100644 --- a/documentation/css/rst.css +++ b/documentation/css/rst.css @@ -466,6 +466,10 @@ code { font-weight: bold; } +div.quickLinks { + margin-left: 15px; +} + div.navigation { position:fixed; width:245px; @@ -482,6 +486,8 @@ div.navigation { div.navigation ul { list-style-image: url('../images/toggler0.gif'); + margin-left: 0px; + padding-left: 20px; } div.navigation a:link, diff --git a/documentation/diagrams.odg b/documentation/diagrams.odg index 9f220735..6c305fc7 100644 Binary files a/documentation/diagrams.odg and b/documentation/diagrams.odg differ diff --git a/documentation/dxptexviewer.rst b/documentation/dxptexviewer.rst new file mode 100644 index 00000000..aebb644b --- /dev/null +++ b/documentation/dxptexviewer.rst @@ -0,0 +1,117 @@ +.. + Copyright 2013 Pixar + + Licensed under the Apache License, Version 2.0 (the "Apache License") + with the following modification; you may not use this file except in + compliance with the Apache License and the following modification to it: + Section 6. Trademarks. is deleted and replaced with: + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor + and its affiliates, except as required to comply with Section 4(c) of + the License and to reproduce the content of the NOTICE file. + + You may obtain a copy of the Apache License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the Apache License with the above modification is + distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the Apache License for the specific + language governing permissions and limitations under the Apache License. + + +dxPtexViewer +------------ + +.. contents:: + :local: + :backlinks: none + +SYNOPSIS +======== + +.. parsed-literal:: + :class: codefhead + + **dxPtexViewer** + [**-e** *environment map*] + [**-d** *HDR diffuse map*] + [**-s** *HDR specular map*] + [**-y**] + [**--disp** *displacement scale*] + [**-l** *isolation level*] + *ptex color file* + *ptex displacement file* + *ptex occlusion file* + *ptex specular file* + *objfile(s)* + +DESCRIPTION +=========== + +``dxPtexViewer`` is a stand-alone application that showcases advanced HDR shading +with color, displacement, occlusion and specular ptex maps. Multiple controls +are available to experiment with the algorithms. + +.. include:: under_development.rst + + +OPTIONS +======= + +**-e** *environment map* + A low dynamic range spherical environment map used as a background. Ideally, + a color-normalized version of the HDR light probe. + +**-d** *HDR diffuse map* + An HDR file containing a diffuse environment map (typically they are low + resolution blurry hemispherical convolutions of the environment light probe). + +**-s** *environment map* + An HDR file containing a specular environment map. + +**--disp** *displacement scale* + A scalar multiplier for the shader displacement values. + +**-y** + Swap Z-up geometry to Y-UP. + +**-l** *isolation level* + Select the desired isolation level of adaptive feature isolation. This can be + useful when trying to load large pieces of geometry. + +*ptex color file* + A ptex file containing RGB channels read as material albedo color. + +*ptex displacement file* + A single-channel ptex file (preferrably float precision) containing the + displacement values. + +*ptex occlusion file* + A single-channel ptex file (preferrably 8 bits precision) containing a + pre-computed ambient occlusion signal. + +*ptex specular file* + A single-channel ptex file (preferrably 8 bits precision) applied to modulate + the specular reflectance of the material + +*objfile(s)* + A sequence of obj files used as an animation loop (the topology has to match + the data contained in all the ptex files !) + + +Keyboard Controls +================= + + .. code:: c++ + + q : quit + esc : hide GUI + f : fit frame + +/- : increase / decrese tessellation rate + + + +.. include:: examples_see_also.rst diff --git a/documentation/dxviewer.rst b/documentation/dxviewer.rst index be06ae73..7542f5ea 100644 --- a/documentation/dxviewer.rst +++ b/documentation/dxviewer.rst @@ -44,12 +44,16 @@ DESCRIPTION uniform and feature adaptive subdivision schemes to a collection of geometric shapes. Multiple controls are available to experiment with the algorithms. +.. image:: images/dxviewer.png + :width: 400px + :align: center + :target: images/dxviewer.png .. container:: impnotip * **Note:** - dxViewer requires Microsoft's DirectX 11 SDK + dxViewer requires Microsoft's DirectX D3D11 SDK OPTIONS ======= @@ -62,16 +66,5 @@ OPTIONS Number of repetitions of the animtion loop (default=0 is infinite) -SEE ALSO -======== - -`Code Examples `__, \ -`glViewer `__, \ -`glBatchViewer `__, \ -`glStencilViewer `__, \ -`ptexViewer `__, \ -`paintTest `__, \ -`limitEval `__, \ -`dxViewer `__, \ -`uvViewer `__, \ +.. include:: examples_see_also.rst diff --git a/documentation/examples_see_also.rst b/documentation/examples_see_also.rst new file mode 100644 index 00000000..d53a3624 --- /dev/null +++ b/documentation/examples_see_also.rst @@ -0,0 +1,14 @@ +SEE ALSO +======== + +Other `examples `__ \ : +`glViewer `__, \ +`glShareTopology `__, \ +`glStencilViewer `__, \ +`glPtexViewer `__, \ +`glEvalLimit `__, \ +`glFVarViewer `__, \ +`dxViewer `__, \ +`dxPtexViewer `__, \ +`mayaPolySmooth `__, \ + diff --git a/documentation/far_overview.rst b/documentation/far_overview.rst index 867ceb88..df33b9fc 100644 --- a/documentation/far_overview.rst +++ b/documentation/far_overview.rst @@ -1,20 +1,20 @@ .. Copyright 2013 Pixar - + Licensed under the Apache License, Version 2.0 (the "Apache License") with the following modification; you may not use this file except in compliance with the Apache License and the following modification to it: Section 6. Trademarks. is deleted and replaced with: - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4(c) of the License and to reproduce the content of the NOTICE file. - + You may obtain a copy of the Apache License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -29,39 +29,227 @@ FAR Overview :local: :backlinks: none +.. image:: images/api_layers_3_0.png + :width: 100px + :target: images/api_layers_3_0.png + Feature Adaptive Representation (Far) ===================================== -Far is a serialized topoloigcal data representation.Far uses hbr to create and -cache fast run time data structures for table driven subdivision of vertices and -cubic patches for limit surface evaluation. `Feature-adaptive `__ -refinement logic is used to adaptively refine coarse topology near features like -extraordinary vertices and creases in order to make the topology amenable to -cubic patch evaluation. Far is also a generic, templated algorithmic base API -that clients in higher levels instantiate and use by providing an implementation -of a vertex class. It supports these subdivision schemes: +The *Far* API layer is the central interface that processes client-supplied +geometry and turns it into a `serialized data representation +`__ ready for parallel processing. -Factories & Tables +First, *Far* provides the tools to refine subidivision topology +(`Far::TopologyRefiner <#far-topologyrefiner>`__). Topology refinement can be +either uniform or sparse, where extraordinary features are automatically +isolated (see `feature adaptive subdivision `__). + +As a geometry representation, *Far* also provides a set of *"Tables"* classes. +These tables are designed to be static containers for the refined topology +data, after it has been serialized and factorized. This represnetation is +embodied in the `Far::PatchTables <#far-patchtables>`__ and the +`Far::StencilTables <#far-patchtables>`__ classes. + +*Far* is also a fully featured API. Typically *Far* tabular data is targetted at +*Osd*, where it can be processed by an implementation optimized for a specific +hardware. However, for client-code that does not require a dedicated +implementation, *Far* itself provides a fully-featured single-threaded +implementation of subdivision interpolation algorithms, both discrete and at +the limit. + +Refining Topology +================= + +The *Far* topology classes present a public interface for the refinement +functionality provided in *Vtr*, either directly within Far or indirectly +eventually though *Osd*. The two main topology refinement classes are as +follows: + ++-------------------------------+---------------------------------------------------+ +| TopologyRefiner | A class encapsulating the topology of a refined | +| | mesh. | ++-------------------------------+---------------------------------------------------+ +| TopologyRefinerFactory | A factory class template specialized by users (in | +| | terms of their mesh class) to construct | +| | TopologyRefiner as quickly as possible. | ++-------------------------------+---------------------------------------------------+ + +These classes are the least well defined of the API, but given they provide the +public interface to all of the improvements proposed, they potentially warrant +the most attention. Far::TopologyRefiner is purely topological and it is the +backbone used to construct or be associated with the other table classes in Far. + +.. container:: notebox + + **Alpha Issues** + + Interface issues needing attention: + + * TopologyRefiner::Refine() needs more options (bundled in struct) + * TopologyRefiner::Interpolate() methods need revisiting + * considering simplifying TopologyRefiner interface overall -- may expose + TopologyLevel for public inspection + * specialization of TopologyRefinerFactory needs more work + +Far::TopologyRefiner +******************** + +TopologyRefiner is the building block for many other useful classes in +OpenSubdiv, but its purpose is more specific. It is intended to store the +topology of an arbitrarily refined subdivision hierarchy to support the +construction of `stencil tables <#patch-tables>`__, `patch tables +<#patch-tables>`__, etc. + +Aside from public access to topology, *TopologyRefiner::Refine(...)* is +internally where simple specifications of refinement (currently uniform or +feature-adaptive with a level argument) will be translated into refinement +operations within Vtr. Feature-adaptive refinement is a special case of +*"sparse"* or *"selective"* refinement, and so the feature-adaptive logic +exists internal to TopologyRefiner and translates the feature-analysis into a +simpler topological specification of refinement to Vtr. + +.. image:: images/topology_refiner.png + :align: center + +The longer term intent is that the public Refine(...) operation eventually be +overloaded to allow clients more selective control of refinement. While +TopologyRefiner is a purely topological class, and so free of any definitions +of vertex data, the public inteface has been extended to include templated +functors that allow clients to interpolate primitive variable data. + +Far::TopologyRefinerFactory +*************************** + +Consistent with other classes in Far instances of TopologyRefiner are created +by a factory class -- in this case Far::TopologyRefinerFactory. This class +is an important entry point for clients its task is to map/convert data in a +client's mesh into the internal `Vtr `__ representation as +quickly as possible. + +The TopologyRefinerFactory class is a class template parameterized by and +specialized for the client's mesh class, i.e. TopologyRefinerFactory. +Since a client' mesh representation knows best how to identify the topological +neighborhoods required, no generic implementation would provide the most +direct means of conversion possible, and so we rely on specialization. For +situations where mesh data is not defined in a boundary representation, a +simple container for raw mesh data is provided along with a Factory +specialized to construct TopologyRefiners from it. + +So there are two ways to create TopologyRefiners: + + * use the existing TopologyRefinerFactory with a + populated instance of TopologyDescriptor + * specialize TopologyRefinerFactory for more efficient + conversion + +XXXX + +Specialization of TopologyRefinerFactory should be done with care +as the goal here is to maximize the performance of the conversion and so +minimize overhead due to runtime validation. The template provides the +high-level construction of the required topology vectors of the underlying +Vtr, with the requirement that two methods will be specialized with the +following purpose: + + * specify the sizes of topological data so that vectors can be pre-allocated + * assign the topological data to the newly allocated vectors + +As noted above, the assumption here is that the client's boundary-rep knows best +how to retrieve the data that we require most efficiently. After the factory class +gathers sizing information and allocates appropriate memory, the factory provides +the client with locations of the appropriate tables to be populated (using the +same `Array `__ classes and interface used to access +the tables). The client is expected to load a complete topological description +along with additional optional data, i.e.: + + * the six topological relations required by Vtr, oriented when manifold + * sharpness values for edges and/or vertices (optional) + * additional tags related to the components, e.g. holes (optional) + * values-per-face for face-varying channels (optional) + +While there is plenty of opportunity for user error here, that is no different +from any other conversion process. Given that Far controls the construction +process through the Factory class, we do have ample opportunity to insert +runtime validation, and to vary that level of validation at any time on an +instance of the Factory. + +A common base class has been created for the factory class, i.e.: + +.. code:: c++ + + template + class TopologyRefinerFactory : public TopologyRefinerFactoryBase + +both to provide common code independent of and also potentially to +protect core code from unwanted specialization. + +Far::PatchTables +================ + +.. include:: under_development.rst + + +Far::StencilTables ================== -Subdivision Tables -================== +.. include:: under_development.rst -Patch Tables -============ +The base container for stencil data is the StencilTables class. As with most +other Far entities, it has an associated StencilTablesFactory that requires +a TopologyRefiner: +.. image:: images/far_stencil5.png + :align: center -Stencil Tables -============== +Principles +********** +Iterative subdivision algorithms such as the one used in `SubdivisionTables +<#subdivision-tables>`__ converge towards the limit surface by sucessively +refining the vertices of the coarse control cage. -Stencils are the most direct method of evaluation of specific locations on the -limit of a subdivision surface starting from the coarse vertices of the control -cage. +.. image:: images/far_stencil4.png + :align: center + +Each step is dependent upon the previous subidivion step being completed, and a +substantial number of steps may be required in order approximate the limit. Since +each subdivision step incurs an O(4 :superscript:`n`) growing amount of +computations, the accrued number of interpolations can be quite large. + +However, every intermediate subdivided vertex can be expressed as a linear +interpolation of vertice from the previous step. So, eventually, every point at +on the limit surface can be expressed as a weighted average of the set of coarse +control vertices from the one-ring surrounding the face that the point is in: + +.. image:: images/far_stencil3.png + :align: center + +Where: + +.. image:: images/far_stencil2.png + :align: center + +Stencils are created by combining the list of control vertices of the 1-ring +to a set of interpolation weights obtained by successive accumulation of +subdivision interpolation weights. + +The weight accumulation process is made efficient by adaptively subdividing the +control cage only around extraordinary locations, and otherwise reverting to fast +bi-cubic bspline patch evaluation. The use of bi-cubic patches also allows the +accumulation of analytical derivatives. + +Limit Stencils +************** + +Limit stencils are the most direct method of evaluation of specific locations on +the limit of a subdivision surface starting from the coarse vertices of the +control cage. .. image:: images/far_stencil0.png :align: center + Sample Location *************** @@ -76,89 +264,11 @@ unique ptex face indices for instance. .. image:: images/far_stencil6.png :align: center +Code example +************ -Principles -********** - -Iterative subdivision algorithms such as the one used in `FarSubdivisionTables <#subdivision-tables>`__ -converge towards the limit surface by sucessively refining the vertices of the -coarse control cage. - -.. image:: images/far_stencil4.png - :align: center - -Each step is dependent upon the previous subidivion step being completed, and a -substantial number of steps may be required in order approximate the limit. Since -each subdivision step incurs an O(4 :superscript:`n`) growing amount of -computations, the accrued number of interpolations can be quite large. - -However, every intermediate subdivided vertex can be expressed as a linear -interpolation of vertice from the previous step. So, eventually, every point at -on the limit surface can be expressed as a weighted average of the set of coarse -control vertices from the one-ring surrounding the face that the point is in: - -.. image:: images/far_stencil3.png - :align: center - -Where: - -.. image:: images/far_stencil2.png - :align: center - -Stencils are created by combining the list of control vertices of the 1-ring -to a set of interpolation weights obtained by successive accumulation of -subdivision interpolation weights. - -The weight accumulation process is made efficient by adaptively subdividing the -control cage only around extraordinary locations, and otherwise reverting to fast -bi-cubic bspline patch evaluation. The use of bi-cubic patches also allows the -accumulation of analytical derivatives. - -API Architecture -**************** - -The base container for stencil data is the FarStencilTables class. As with most -other Far entities, it has an associated FarStencilTablesFactory that requires -an HbrMesh: - -.. image:: images/far_stencil5.png - :align: center - -Assuming a properly qualified HbrMesh: - -.. code:: c++ - - HMesh * mesh; - - FarStencilTables controlStencils; - - OpenSubdiv::FarStencilTablesFactory<> factory(mesh); - - for (int i=0; iGetFace(i); - - int nv = f->GetNumVertices(); - - if (nv!=4) { - - // if the face is not a quad, we have to iterate over sub-quad(rants) - for (int j=0; jGetNumVertices(); ++j) { - - factory.SetCurrentFace(i,j); - - factory.AppendStencils( &controlStencils, nsamples/nv, u, v, reflevel ); - } - } else { - - factory.SetCurrentFace(i); - - factory.AppendStencils( &controlStencils, g_nsamples, u, v, reflevel ); - } - } - -When the control vertices (controlPoints) move in space, the limit locations can -be very efficiently recomputed simply by applying the blending weights to the +When the control vertices (controlPoints) move in space, the limit locations can +be very efficiently recomputed simply by applying the blending weights to the series of coarse control vertices: .. code:: c++ @@ -183,7 +293,7 @@ series of coarse control vertices: points, utan, vtan; - + // Uppdate points by applying stencils controlStencils.UpdateValues( reinterpret_cast( &controlPoints[0]), &points[0] ); diff --git a/documentation/getting_started.rst b/documentation/getting_started.rst index f48d45c1..49434b11 100644 --- a/documentation/getting_started.rst +++ b/documentation/getting_started.rst @@ -1,26 +1,26 @@ -.. +.. Copyright 2013 Pixar - + Licensed under the Apache License, Version 2.0 (the "Apache License") with the following modification; you may not use this file except in compliance with the Apache License and the following modification to it: Section 6. Trademarks. is deleted and replaced with: - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4(c) of the License and to reproduce the content of the NOTICE file. - + You may obtain a copy of the Apache License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License. - + Getting Started --------------- @@ -30,13 +30,13 @@ Getting Started :backlinks: none -Getting started with Git and accessing the source code. +Getting started with Git and accessing the source code. Downloading the code ==================== -The code is hosted on a Github public repository. Download and setup information +The code is hosted on a Github public repository. Download and setup information for Git tools can be found `here `__. You can access the OpenSubdiv Git repository at https://github.com/PixarAnimationStudios/OpenSubdiv @@ -44,28 +44,28 @@ You can access the OpenSubdiv Git repository at https://github.com/PixarAnimatio From there, there are several ways of downloading the OpenSubdiv source code. - Zip archive : downloaded from `here `__ - + - Using a GUI client : you can find a list `here `__ Please refer to the documentation of your preferred application. - - From the GitShell, Cygwin or the CLI : assuming that you have the Git tools - installed, you can clone the OpenSubdiv repository directly with the + - From the GitShell, Cygwin or the CLI : assuming that you have the Git tools + installed, you can clone the OpenSubdiv repository directly with the following command: - - .. code:: c++ - - git clone https://github.com/PixarAnimationStudios/OpenSubdiv.git - - -These methods only pull static archives, which is are not under the version + .. code:: c++ + + git clone https://github.com/PixarAnimationStudios/OpenSubdiv.git + + + +These methods only pull static archives, which is are not under the version control system and therefore cannot pull updates or push changes back. If you intend on contributing features or fixes to the main trunk of the code, you will need to create a free Github account and clone a fork of the OpenSubdiv repository. Submissions to the main code trunk can be sent using Git's pull-request mechanisms. Please note that we are using the git flow tools so all changes should be made to -our *dev* branch. Before we can accept submissions however, we will need a signed +our *dev* branch. Before we can accept submissions however, we will need a signed `Contributor's License Agreement `__. ---- @@ -73,17 +73,22 @@ our *dev* branch. Before we can accept submissions however, we will need a signe Branches & Git Flow =================== -Since version 1.1.0, OpenSubdiv has adopted the `Git Flow +Since version 1.1.0, OpenSubdiv has adopted the `Git Flow `__ branching model . Our active development branch is named *dev* : all new features and buf fixes should be submitted to this branch. The changes submitted to the dev branch are periodically patched to the 'master' branch as new versions are released. +.. image:: images/gitflow.jpg + :align: center + :target: images/gitflow.jpg + + Checking out branches _____________________ -The Git Flow `tools `__ are not a requisite for +The Git Flow `tools `__ are not a requisite for working with the OpenSubdiv code base, but new work should always be performed in the *dev* branch, or dedicated feature-branches. By default, a cloned repository will be pointing to the 'master' branch. You can switch to the *dev* branch using @@ -130,10 +135,10 @@ Checking out version 1.2.0: Making Changes ______________ -Direct push access to the OpenSubdiv master repository is currently limited to a +Direct push access to the OpenSubdiv master repository is currently limited to a small internal development team. External code should be submitted by sending Git -`pull-requests `__ from -forks of our *dev* branch. +`pull-requests `__ from +forks of our *dev* branch. ---- @@ -142,32 +147,25 @@ Code Overview The OpenSubdiv code base contains the following main areas: -**./opensubdiv/** - - The main subdivision APIs : Hbr, Far and Osd. - - -**./regression/** - - Standalone regression tests and baseline data to help maintain the integrity of - our APIs. If GPU SDKs are detected, some tests will attempt to run computations - on those GPUs. - -**./examples/** - - A small collection of standalone applications that illustrate how to deploy the - various features and optimizations of the OpenSubdiv APIs. The GL-based examples - rely on the cross-platform GLFW API for interactive window management, while the - DirectX ones are OS-native. - -**./python/** - - Python-SWIG bindings for a minimal uniform refinement wrapper - -**./documentation/** - - The reStructuredText source files along with python scripts that generate the HTML - documentation site. ++----------------------+---------------------------------------------------------------------------------------+ +| Directory | Contents | ++======================+=======================================================================================+ +| **./opensubdiv/** | The main subdivision APIs : Sdc, Vtr, Far and Osd. | ++----------------------+---------------------------------------------------------------------------------------+ +| **./examples/** | A small collection of standalone applications that illustrate how to deploy the + +| | various features and optimizations of the OpenSubdiv APIs. The GL-based examples | +| | rely on the cross-platform GLFW API for interactive window management, while the | +| | DirectX ones are OS-native. | ++----------------------+---------------------------------------------------------------------------------------+ +| **./tutorials/** | Tutorials showing how to manipulate the APIs of OpenSubdiv. | ++----------------------+---------------------------------------------------------------------------------------+ +| **./documentation/** | The reStructuredText source files along with python scripts that generate the HTML | +| | documentation site. | ++----------------------+---------------------------------------------------------------------------------------+ +| **./regression/** | Standalone regression tests and baseline data to help maintain the integrity of | +| | our APIs. If GPU SDKs are detected, some tests will attempt to run computations | +| | on those GPUs. | ++----------------------+---------------------------------------------------------------------------------------+ ---- diff --git a/documentation/limiteval.rst b/documentation/glevallimit.rst similarity index 82% rename from documentation/limiteval.rst rename to documentation/glevallimit.rst index 350371eb..69652612 100644 --- a/documentation/limiteval.rst +++ b/documentation/glevallimit.rst @@ -22,8 +22,8 @@ language governing permissions and limitations under the Apache License. -limitEval ---------- +glEvalLimit +----------- .. contents:: :local: @@ -40,7 +40,7 @@ SYNOPSIS DESCRIPTION =========== -``limitEval`` is a stand-alone application that showcases the limit surface +``glEvalLimit`` is a stand-alone application that showcases the limit surface Eval module. On the given shape, random samples are generated in local u,v space. Vertex, varying and face-varying data is then computed on the surface limit and displayed as colors. Multiple controls are available to experiment with the algorithms. @@ -57,14 +57,4 @@ OPTIONS Launches the application in full-screen mode (if is supported by GLFW on the OS) -SEE ALSO -======== - -`Code Examples `__, \ -`glViewer `__, \ -`glBatchViewer `__, \ -`ptexViewer `__, \ -`paintTest `__, \ -`limitEval `__, \ -`dxViewer `__, \ - +.. include:: examples_see_also.rst diff --git a/documentation/uvviewer.rst b/documentation/glfvarviewer.rst similarity index 81% rename from documentation/uvviewer.rst rename to documentation/glfvarviewer.rst index 6d1202d8..e3d13134 100644 --- a/documentation/uvviewer.rst +++ b/documentation/glfvarviewer.rst @@ -22,8 +22,8 @@ language governing permissions and limitations under the Apache License. -uvViewer --------- +glFVarViewer +------------ .. contents:: :local: @@ -32,12 +32,12 @@ uvViewer SYNOPSIS ======== - **uvViewer** [**-d** *isolation level*] [**-c** *animation loops*] [**-f**] *objfile(s)* + **glFVarViewer** [**-d** *isolation level*] [**-c** *animation loops*] [**-f**] *objfile(s)* DESCRIPTION =========== -``uvViewer`` is a stand-alone application that allows the inspection of +``glFVarViewer`` is a stand-alone application that allows the inspection of face-varying data interpolation. The window displays 2 views: * left side: regular 3D view of the model, with a procedural (u,v) texture @@ -65,14 +65,5 @@ OPTIONS Launches the application in full-screen mode (if is supported by GLFW on the OS) -SEE ALSO -======== - -`Code Examples `__, \ -`glBatchViewer `__, \ -`glStencilViewer `__, \ -`ptexViewer `__, \ -`paintTest `__, \ -`limitEval `__, \ -`dxViewer `__, \ +.. include:: examples_see_also.rst diff --git a/documentation/painttest.rst b/documentation/glpainttest.rst similarity index 76% rename from documentation/painttest.rst rename to documentation/glpainttest.rst index bddc6f9d..d88ee8a1 100644 --- a/documentation/painttest.rst +++ b/documentation/glpainttest.rst @@ -22,8 +22,8 @@ language governing permissions and limitations under the Apache License. -paintTest ---------- +glPaintTest +----------- .. contents:: :local: @@ -35,16 +35,15 @@ SYNOPSIS .. parsed-literal:: :class: codefhead - **paintTest** + **glPaintTest** [**-f**] *objfile(s)* DESCRIPTION =========== -``ptexViewer`` is a stand-alone application that showcases advanced HDR shading -with color, displacement, occlusion and specular ptex maps. Multiple controls -are available to experiment with the algorithms. +``glPaintTest`` is a small stand-alone application showing the potential of +using GPU limit tessellation for painting and sculpting applications. .. image:: images/painttest.jpg :width: 400px @@ -72,15 +71,4 @@ Keyboard Controls d : use texture as displacement -SEE ALSO -======== - -`Code Examples `__, \ -`glViewer `__, \ -`glBatchViewer `__, \ -`glStencilViewer `__, \ -`ptexViewer `__, \ -`limitEval `__, \ -`dxViewer `__, \ - - +.. include:: examples_see_also.rst diff --git a/documentation/ptexviewer.rst b/documentation/glptexviewer.rst similarity index 88% rename from documentation/ptexviewer.rst rename to documentation/glptexviewer.rst index 613ef1cd..3aaddf67 100644 --- a/documentation/ptexviewer.rst +++ b/documentation/glptexviewer.rst @@ -22,8 +22,8 @@ language governing permissions and limitations under the Apache License. -ptexViewer ----------- +glPtexViewer +------------ .. contents:: :local: @@ -35,7 +35,7 @@ SYNOPSIS .. parsed-literal:: :class: codefhead - **ptexViewer** + **glPtexViewer** [**-e** *environment map*] [**-d** *HDR diffuse map*] [**-s** *HDR specular map*] @@ -54,7 +54,7 @@ SYNOPSIS DESCRIPTION =========== -``ptexViewer`` is a stand-alone application that showcases advanced HDR shading +``glPtexViewer`` is a stand-alone application that showcases advanced HDR shading with color, displacement, occlusion and specular ptex maps. Multiple controls are available to experiment with the algorithms. @@ -122,20 +122,14 @@ Keyboard Controls .. code:: c++ - e : draw normals - g : toggle ptex texel guttering + q : quit + esc : hide GUI + x : save screenshot + f : fit frame + +/- : increase / decrese tessellation rate r : reload and re-compile the shader files + e : draw normals -SEE ALSO -======== - -`Code Examples `__, \ -`glViewer `__, \ -`glBatchViewer `__, \ -`glStencilViewer `__, \ -`paintTest `__, \ -`limitEval `__, \ -`dxViewer `__, \ -`uvViewer `__, \ +.. include:: examples_see_also.rst diff --git a/documentation/glsharetopology.rst b/documentation/glsharetopology.rst new file mode 100644 index 00000000..12a87aae --- /dev/null +++ b/documentation/glsharetopology.rst @@ -0,0 +1,58 @@ +.. + Copyright 2013 Pixar + + Licensed under the Apache License, Version 2.0 (the "Apache License") + with the following modification; you may not use this file except in + compliance with the Apache License and the following modification to it: + Section 6. Trademarks. is deleted and replaced with: + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor + and its affiliates, except as required to comply with Section 4(c) of + the License and to reproduce the content of the NOTICE file. + + You may obtain a copy of the Apache License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the Apache License with the above modification is + distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the Apache License for the specific + language governing permissions and limitations under the Apache License. + + +glShareTopology +--------------- + +.. contents:: + :local: + :backlinks: none + +SYNOPSIS +======== + +.. parsed-literal:: + :class: codefhead + + **glShareTopology** [**-d** *isolation level*] *objfile(s)* + +DESCRIPTION +=========== + +``glShareTopology`` is a stand-alone application that showcases the implementation of topology +instancing across Compute contexts. Multiple controls are available to experiment with the algorithms. + +.. image:: images/glsharetopology.png + :width: 400px + :align: center + :target: images/glsharetopology.png + +OPTIONS +======= + +**-d** *isolation level* + Select the desired isolation level of adaptive feature isolation. This can be + useful when trying to load large pieces of geometry. + +.. include:: examples_see_also.rst diff --git a/documentation/glstencilviewer.rst b/documentation/glstencilviewer.rst index 19a478c5..c502c171 100644 --- a/documentation/glstencilviewer.rst +++ b/documentation/glstencilviewer.rst @@ -1,26 +1,26 @@ -.. +.. Copyright 2013 Pixar - + Licensed under the Apache License, Version 2.0 (the "Apache License") with the following modification; you may not use this file except in compliance with the Apache License and the following modification to it: Section 6. Trademarks. is deleted and replaced with: - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4(c) of the License and to reproduce the content of the NOTICE file. - + You may obtain a copy of the Apache License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License. - + glStencilViewer --------------- @@ -32,7 +32,7 @@ glStencilViewer SYNOPSIS ======== -.. parsed-literal:: +.. parsed-literal:: :class: codefhead **glStencilViewer** [**-d** *isolation level*] [**-f**] *objfile(s)* @@ -40,35 +40,24 @@ SYNOPSIS DESCRIPTION =========== -``glStencilViewer`` is a stand-alone application that showcases the application of -pre-computed stencil tables to a collection of geometric test shapes. Multiple +``glStencilViewer`` is a stand-alone application that showcases the application of +pre-computed stencil tables to a collection of geometric test shapes. Multiple controls are available to experiment with the algorithms. -.. image:: images/glstencilviewer.png +.. image:: images/glstencilviewer.png :width: 400px :align: center - :target: images/glstencilviewer.png + :target: images/glstencilviewer.png OPTIONS ======= **-d** *isolation level* - Select the desired isolation level of adaptive feature isolation. This can be + Select the desired isolation level of adaptive feature isolation. This can be useful when trying to load large pieces of geometry. **-f** Launches the application in full-screen mode (if is supported by GLFW on the OS) -SEE ALSO -======== - -`Code Examples `__, \ -`glViewer `__, \ -`glBatchViewer `__, \ -`ptexViewer `__, \ -`paintTest `__, \ -`limitEval `__, \ -`dxViewer `__, \ -`uvViewer `__, \ - +.. include:: examples_see_also.rst diff --git a/documentation/glviewer.rst b/documentation/glviewer.rst index afee261e..7877b840 100644 --- a/documentation/glviewer.rst +++ b/documentation/glviewer.rst @@ -35,7 +35,12 @@ SYNOPSIS .. parsed-literal:: :class: codefhead - **glViewer** [**-d** *isolation level*] [**-c** *animation loops*] [**-f**] *objfile(s)* + **glViewer** + [**-d** *isolation level*] + [**-c** *animation loops*] + [**-f**] + [**-axis**] + *objfile(s)* DESCRIPTION =========== @@ -63,15 +68,11 @@ OPTIONS Launches the application in full-screen mode (if is supported by GLFW on the OS) -SEE ALSO -======== +**-axis** + Swap Y-up / Z-up axis when loading obj files -`Code Examples `__, \ -`glBatchViewer `__, \ -`glStencilViewer `__, \ -`ptexViewer `__, \ -`paintTest `__, \ -`limitEval `__, \ -`dxViewer `__, \ -`uvViewer `__, \ +*objfile(s)* + A sequence of obj files used as an animation loop (the topology has to match + the data contained in all the ptex files !) +.. include:: examples_see_also.rst diff --git a/documentation/hbr_overview.rst b/documentation/hbr_overview.rst index 080b9ed7..eaf93daa 100644 --- a/documentation/hbr_overview.rst +++ b/documentation/hbr_overview.rst @@ -1,26 +1,26 @@ -.. +.. Copyright 2013 Pixar - + Licensed under the Apache License, Version 2.0 (the "Apache License") with the following modification; you may not use this file except in compliance with the Apache License and the following modification to it: Section 6. Trademarks. is deleted and replaced with: - + 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor and its affiliates, except as required to comply with Section 4(c) of the License and to reproduce the content of the NOTICE file. - + You may obtain a copy of the Apache License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the Apache License with the above modification is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Apache License for the specific language governing permissions and limitations under the Apache License. - + HBR Overview ------------ @@ -36,11 +36,24 @@ Hierarchical Boundary Representation (Hbr) Hbr is an interconnected topological data representation. The high level of vertex connectivity information makes this representation well suited for creation and editing purposes. It is however inefficient for interactive refinement operations: -Separate objects are allocated for each vertex and edge with pointers to neighboring +Separate objects are allocated for each vertex and edge with pointers to neighboring vertices and edges. Hbr is also the lowest-level subdivision library in Pixar's `Photorealistic RenderMan`. +.. container:: notebox + + **Note** + + As of OpenSubdiv 3.0, all **Hbr** dependencies have been removed from the + core APIs (**Sdc**, **Vtr**, **Far**, **Osd**). The legacy source code of + **Hbr** is provided purely for regression and legacy purposes. If your code + is currently depending on Hbr functionaliy, we recommend migrating to the + newer APIs as we cannot guarantee that this code will be maintained in + future releases. + For more information see the `3.0 release notes `_ + + ---- Half-edge Data Structure @@ -56,12 +69,12 @@ The current implementation is based on a half-edge data structure. Half-edge cycles and Manifold Topology ====================================== -Because half-edges only carry a reference to their opposite half-edge, a given -edge can only access a single neighboring edge cycle. +Because half-edges only carry a reference to their opposite half-edge, a given +edge can only access a single neighboring edge cycle. .. image:: images/half_edge_cycle.png :align: center - + This is a fundamental limitation of the half-edge data structure, in that it cannot represent non-manifold geometry, in particular fan-type topologies. A different approach to topology will probably be necessary in order to accomodate @@ -72,10 +85,10 @@ non-manifold geometry. Templated Vertex Class ====================== -The vertex class has been abstracted into a set of templated function accesses. -Providing Hbr with a template vertex class that does not implement these functions -allows client-code to use Hbr as a pure topological analysis tool without having -to pay any costs for data interpolation. It also allows client-code to remain in +The vertex class has been abstracted into a set of templated function accesses. +Providing Hbr with a template vertex class that does not implement these functions +allows client-code to use Hbr as a pure topological analysis tool without having +to pay any costs for data interpolation. It also allows client-code to remain in complete control of the layout of the vertex data : interleaved or non-interleaved. ---- @@ -97,13 +110,13 @@ Boundary Interpolation Rules | k_InterpolateBoundaryAlwaysSharp | +------------------------------------+ -This enum is shared for both `vertex and face-varying interpolation +This enum is shared for both `vertex and face-varying interpolation `__, with the following distinctions: - vertex boundaries: - the *BoundaryNone* rule skips all boundary vertices (results are ''undefined'') - the *AlwaysSharp* rule does not apply - + - face-varying boundaries: - the *BoundaryNone* rule selects bilinear face-varying interpolation diff --git a/documentation/images/api_data_flow.png b/documentation/images/api_data_flow.png index 95682575..69a10874 100644 Binary files a/documentation/images/api_data_flow.png and b/documentation/images/api_data_flow.png differ diff --git a/documentation/images/api_layers.png b/documentation/images/api_layers.png index 14c0cfd2..1dd7fb22 100644 Binary files a/documentation/images/api_layers.png and b/documentation/images/api_layers.png differ diff --git a/documentation/images/api_layers_3_0.png b/documentation/images/api_layers_3_0.png new file mode 100644 index 00000000..08315937 Binary files /dev/null and b/documentation/images/api_layers_3_0.png differ diff --git a/documentation/images/api_representations.png b/documentation/images/api_representations.png index 6d31d691..9ffc1c51 100644 Binary files a/documentation/images/api_representations.png and b/documentation/images/api_representations.png differ diff --git a/documentation/images/api_workflows.png b/documentation/images/api_workflows.png index c439e1fa..80d0fd9a 100644 Binary files a/documentation/images/api_workflows.png and b/documentation/images/api_workflows.png differ diff --git a/documentation/images/construction.png b/documentation/images/construction.png new file mode 100644 index 00000000..aea605fb Binary files /dev/null and b/documentation/images/construction.png differ diff --git a/documentation/images/dxviewer.png b/documentation/images/dxviewer.png new file mode 100644 index 00000000..b29af583 Binary files /dev/null and b/documentation/images/dxviewer.png differ diff --git a/documentation/images/far_tutorial_0.0.png b/documentation/images/far_tutorial_0.0.png new file mode 100644 index 00000000..e18edfd6 Binary files /dev/null and b/documentation/images/far_tutorial_0.0.png differ diff --git a/documentation/images/far_tutorial_1.0.png b/documentation/images/far_tutorial_1.0.png new file mode 100644 index 00000000..0bc548d8 Binary files /dev/null and b/documentation/images/far_tutorial_1.0.png differ diff --git a/documentation/images/far_tutorial_3.0.png b/documentation/images/far_tutorial_3.0.png new file mode 100644 index 00000000..c07dd826 Binary files /dev/null and b/documentation/images/far_tutorial_3.0.png differ diff --git a/documentation/images/gitflow.jpg b/documentation/images/gitflow.jpg new file mode 100644 index 00000000..425e13c3 Binary files /dev/null and b/documentation/images/gitflow.jpg differ diff --git a/documentation/images/glsharetopology.png b/documentation/images/glsharetopology.png new file mode 100644 index 00000000..6aaddff8 Binary files /dev/null and b/documentation/images/glsharetopology.png differ diff --git a/documentation/images/hbr_tutorial_2.0.png b/documentation/images/hbr_tutorial_2.0.png new file mode 100644 index 00000000..becab919 Binary files /dev/null and b/documentation/images/hbr_tutorial_2.0.png differ diff --git a/documentation/images/osd_flow.png b/documentation/images/osd_flow.png new file mode 100644 index 00000000..da504d64 Binary files /dev/null and b/documentation/images/osd_flow.png differ diff --git a/documentation/images/osd_layers.png b/documentation/images/osd_layers.png index 62b0a543..16c02d3c 100644 Binary files a/documentation/images/osd_layers.png and b/documentation/images/osd_layers.png differ diff --git a/documentation/images/osd_splash.png b/documentation/images/osd_splash.png new file mode 100644 index 00000000..270469dd Binary files /dev/null and b/documentation/images/osd_splash.png differ diff --git a/documentation/images/topology_refiner.png b/documentation/images/topology_refiner.png new file mode 100644 index 00000000..a2c99797 Binary files /dev/null and b/documentation/images/topology_refiner.png differ diff --git a/documentation/images/vtr_refinement.1.png b/documentation/images/vtr_refinement.1.png new file mode 100644 index 00000000..2ca00486 Binary files /dev/null and b/documentation/images/vtr_refinement.1.png differ diff --git a/documentation/intro.rst b/documentation/intro.rst index e6e49272..6592b003 100644 --- a/documentation/intro.rst +++ b/documentation/intro.rst @@ -69,10 +69,9 @@ a character of 30,000 polygons to the second level of subdivision (500,000 polyg Being able to perform the same operation in less than 3ms allows the user to interact with the smooth, accurate limit surface at all times. -.. image:: images/efficient_subdivision.png - :height: 400px +.. image:: images/osd_splash.png :align: center - :target: images/efficient_subdivision.png + :target: images/osd_splash.png diff --git a/documentation/maya_osdpolysmooth.rst b/documentation/maya_osdpolysmooth.rst index dc7c6320..d263729e 100644 --- a/documentation/maya_osdpolysmooth.rst +++ b/documentation/maya_osdpolysmooth.rst @@ -100,14 +100,5 @@ fvarBoundaryMethod, fvarPropagateCorners, smoothTriangles, creaseMethod, | - Chaikin: Improves the appearance of multiedge creases with varying weight | | | | +-----------------------------------------------------------------------------------------+------+----------+------------------------------------+ -SEE ALSO -======== -`Code Examples `__, \ -`glBatchViewer `__, \ -`glStencilViewer `__, \ -`ptexViewer `__, \ -`paintTest `__, \ -`limitEval `__, \ -`dxViewer `__, \ -`uvViewer `__, \ +.. include:: examples_see_also.rst diff --git a/documentation/nav_template.txt b/documentation/nav_template.txt index 3e68a6ed..323355dc 100644 --- a/documentation/nav_template.txt +++ b/documentation/nav_template.txt @@ -1,20 +1,20 @@ +