(一),曲面细分

  曲面细分(Tessellation)。最初由ATI开发,主要目的是用来细化模型,精细化场景表现,微软将其采纳后加入DirectX 11,成为DirectX 11的组成部分之一,Directx12自然也是包含这部分技术。这种技术广泛的应用在曲面的几何处理上,但这种技术也可以用在其他诸如模型构建、平滑处理等领域。


  这张图直观的展示了曲面细分的一个重要能力--细化模型,通过曲面细分,我们可以把一个相对粗糙的模型(上图左)精细化为一个更平滑的模型(上图中),再配合贴图置换(Displacement Mapping ),可以表现出细节非常丰富的物体形象。
  自Directx11引入曲面细分后,曲面细分得到了快速的发展。当然,即使我们将曲面细分任务从CPU移到GPU,曲面细分的性能消耗也还是非常可观的,滥用曲面细分将导致极大的性能问题。

(二),Directx12曲面细分规则

  在DirectX中,我们只能配置曲面细分而无权控制曲面细分规则,但这些规则至今微软没有给出,我们只能通过细分表现来推测其细分规则以便更好的理解和运用。

1、三角形的细分

(1)、Tessllation因子规则

  三角形的细分,我们需要配置三个EdgeTess和一个InsideTess,我们来看看不同的Tess值的影响
(为方便比较和简单,三条边和内部tess factor值设置成一样,而且partitioning(“integer”))。
      
    
  
  根据上图,我们来分析一下三角形不同tess factor情况下的规律。
  可以看出在奇数的情况下,1, 3, 5, 7,…, 三角形包括(N+1)/2个环形的的三角形,而中心是一个三角形。在偶数的情况下,三角形内部包括N/2个环形的三角形,但中心是一个点,而不是一个三角形。三角形的边在tess factor 1-8的情况,分别被分为1-8段,对于内部的环形三角形,从外到内,每进一个层次,边分段数是是上一个边分段数减2,比如tess factor = 5,有三个环形三角形,最外边的边分段是5,中间的一个是3,最里面的是1。
  在tess factor 1-8的情况下,细分的三角形个数为:1, 6, 13, 24, 37, 54, 73, 96, 121, 150…
  奇数tess factor:1, 13, 37, 73, 121, => 12, 24, 36,48,…(6*2, 6*4, 6*6, 6*8…)
  偶数tess factor:6, 24, 54, 96, 150, => 18, 30, 42, 54, … (6*3, 6*5, 6*7, 6*9…)

  在DirectX中,每条边以及内部 tess factor也可以不一样,比如三条边的细分因子是2、3、4,内部细分因子是3,则三角形的细分如下图所示:


  上面就是在DirectX12中,三角形Tess因子对细分的影响规则。

(2)、Partitioning因子规则

  在DirectX12中,Partitioning因子可以有四种,分别为fractional_odd,fractional_even,integer,pow2,下面我们看看fractional_odd,fractional_even时,三角形的细分的变化。
  在fractional_even时,tess factor在1-8的情况下的细分效果:
      
      
  从上图,fractional_even表示tess factor是偶数,范围是2-64,如果此时tess factor为1,则和2的结果是一样的,如果此时tess factor为奇数,则细分效果不均匀。
  在fractional_odd时,tess factor在1-8的情况下的细分效果:
    
    
  
  从上图,fractional_odd表示tess factor是奇数,范围1..63, 此时细分效果和Integer是一样的,如果此时tess factor为偶数,则细分效果则比较诡异,偶数的细分并不均匀。
   pow2应该是2的幂次tess factor才有效,具体读者可以自行测试看看。

2、四边形的细分

  四边形的细分,我们需要配置四个EdgeTess和两个InsideTess,我们来看看不同的Tess值的影响
(为方便比较和简单,四条边和内部tess factor值设置成一样,而且partitioning(“integer”))。
      
      
  上图是tess factor1-8时候的细分图,从上图可以看到,四边形在不同tess factor时,四边形细分的细节,tess factor是偶数时候,细分的三角形是对称的,奇数时候,只有一条对角线,细分的三角形是不对称的。相比三角形的细分,四边形的相对来说还算简单,但边的细分以及内部环绕四边形的概念和三角形是一样的,奇数时,中心是一个小的四边形,偶数时中心是一个点。
  上面就是在DirectX12中,四边形Tess因子对细分的影响规则。

(三),参考文献

1、DirectX 11 Tessellation (曲面细分) http://www.nvidia.cn/object/tessellation_cn.html
2、Directx11教程(61) tessellation学习(3) http://www.cnblogs.com/mikewolf2002/archive/2012/08/13/2635666.html
3、Directx11教程(62) tessellation学习(4) http://www.cnblogs.com/mikewolf2002/archive/2012/08/13/2636976.html

Directx12 曲面细分详解相关推荐

  1. 【MATLAB】sphere 球曲面函数详解

    官方文档 画个球瞅瞅 直接看坐标 官方文档 首先看一下 sphere 的官方文档 sphere % sphere 函数用于生成单位球面的 x,y,z 的坐标,以用于 surf or mesh.默认生成 ...

  2. unity曲面细分着色器详解

     前言:本文翻译自catlikecoding上一篇十分详细的英文blog并修改了几处错误,逐行解释了如何在自己的shader中添加曲面细分支持,并给出了多种计算细分因子的方案以及它们的优缺点. 原文链 ...

  3. Qt开发技术:Q3D图表开发笔记(三):Q3DSurface三维曲面图介绍、Demo以及代码详解

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130264470 各位读者,知识无穷而人力有穷,要么改需 ...

  4. Freesurfer recon-all命令详解及使用示例

    Freesurfer recon-all命令详解及使用示例 一.一些名词解释 atlas 模板,带标签的地图 CA Canonical 典型的,规范的(CA Normalize, CA Registe ...

  5. 玛雅2016 Mac主要功能及使用详解

    玛雅maya2016是一款功能非常强大的三维动画软件,maya2016破解版里不仅包含了三维建模.动画.视觉效果和渲染解决方案等功能,还加入了许多实用的功能.使用maya2016可以帮助用户更好的发挥 ...

  6. 战地3寒霜2引擎详解:地形与后期处理技术特性

    之前看过了zXr0带来的两篇寒霜2引擎技术解析么? <战地3>寒霜2引擎渲染流程图文详解     http://pc.07073.com/bf3/frostbite/14097.html ...

  7. [转]战地3寒霜2引擎详解:地形与后期处理技术特性

    之前看过了zXr0带来的两篇寒霜2引擎技术解析么? <战地3>寒霜2引擎渲染流程图文详解     http://pc.07073.com/bf3/frostbite/14097.html ...

  8. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  9. 尺度不变特征变换匹配算法详解

    尺度不变特征变换匹配算法详解 Scale Invariant Feature Transform(SIFT) Just For Fun 对于初学者,从David G.Lowe的论文到实现,有许多鸿沟, ...

  10. 万字长文详解如何用Python玩转OpenGL | CSDN 博文精选

    作者 | 天元浪子 来源 | CSDN博文精选 [编者按]OpenGL(开放式图形库),用于渲染 2D.3D 矢量图形的跨语言.跨平台的应用程序编程接口,C.C++.Python.Java等语言都能支 ...

最新文章

  1. Meteor:发布与订阅
  2. 利用数据存储技术实现数据安全合理备份
  3. 1126 Eulerian Path (25 分)【难度: 一般 / 欧拉图的判定】
  4. Redis使用过程出现类型转换异常问题- 20190220
  5. java ios rsa解密乱码_java与IOS之间的RSA加解密
  6. linux opencv移植教程,OpenCV在Ubuntu和Linux系统下的移植
  7. 如何阻止事件冒泡和默认事件
  8. MySQL的存储函数与存储过程的区别
  9. 【Kali】kali主要工具使用说明(文末附超全思维导图)
  10. ROS机器人操作系统学习记录
  11. 悄悄这样学接口测试,到了公司然后惊艳全场。
  12. Day 20 IOl流
  13. 【正点原子Linux连载】第四十一章 嵌入式Linux LED驱动开发实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
  14. setClickable,setEnabled,setFocusable 的区别
  15. DirectShow使用大全
  16. [Economist] Print me a phone 给我印一部手机
  17. 什么是html超文本语言,什么是超文本?HTML超文本标记语言怎么学?
  18. android仿微信发布动态功能,Android GridView扩展仿微信微博发图动态添加删除图片功能.pdf...
  19. [Debug] printf undefined reference to `putchar‘
  20. 计算机软件卸载不了怎么办,电脑软件卸载不了如何解决?用优化大师卸载软件的方法...

热门文章

  1. android jni stl,Android NDK中C++ STL库动态和静态链接
  2. 油猴插件/脚本还不会使用?看这篇文章就够了, 各种实用的插件/脚本使用技巧
  3. Android WebView性能分析与优化
  4. 基于 Django 的图书馆借阅系统
  5. python输出姓名_如何用Python生成若干个随机姓名?男女取名有方法,不能千篇一律...
  6. python计算黑白图像像素值
  7. 计算机技术在中医药的应用,计算机技术在中医药领域的应用概况
  8. 智能交通中的若干科学和技术问题
  9. 大佬们用代码写的故事
  10. 早早省初始化失败 解决办法~