| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 曲面细分(subdivision)&曲面细分着色器&GPU的LOD -> 正文阅读 |
|
[游戏开发]曲面细分(subdivision)&曲面细分着色器&GPU的LOD |
曲面细分是指将一个模型的面合理的分成更多小的面,从而提升模型精度,提高渲染效果 曲面简化是指将一个模型的面合理的合成更少的面,从而降低模型精度,为特定情形下提供使用(如LOD技术) 。这一过程是可以在CPU中完成的,但组织多个点的动态添加和删除,并且更新同步到着色器所需的vb中,这一过程比较消耗性能,并且实现起来也不能算是特别容易的事情。一个比较理想的做法应该是在GPU硬件中完成相关的操作(曲面细分做色器),并且给用户提供一些可编程的接口。 曲面细分着色器(GPU):带着这一目的,DirectX 11引入了新特性——GPU曲面细分。之后,OpenGL4之后的版本也推出了曲面细分的相关硬件支持(OpenGL ES 3.2)。 曲面细分着色器将复杂的曲面转换为简单的点,线,三角形等。它分为三部分:曲面细分控制着色器(Tessellation Control Shaders),曲面细分引擎(The Tessellation Engine),曲面细分求值着色器(Tessellation Evaluation Shaders)。 曲面细分控制着色器负责确定曲面细分等级。gl_TessLevelInner和gl_TessLevelOuter是内部变量,分别表示内外曲面细分等级(等级越高细分越精细)。gl_in和gl_out也是内部变量,分别表示输入输出数据。gl_InvocationID表示索引 曲面细分引擎是固定管线,将复杂的曲面转换为简单的点,线,三角形等。
表示以等分边界的方式,顺时针生成三角形。 gl_TessCoord表示生成顶点的重心。 曲面细分算法:
简单的Loop细分算法(Loop Subdivision):(这里的loop是人名,可不是循环的意思噢) Loop细分是一种专门针对三角形面的细分方法,其核心步骤也十分容易理解, 连接每条边的中点生成一个新的三角形,原来的三角形就会被分割成4个三角形。 将所有的顶点分为两类,一类是新生成的顶点,一类是老的原来就有的顶点,对于新生成的顶点做如下处理这里新的顶点就是白色的那个顶点,其位置为周围4个顶点的权重之和,各顶点权重如图所示,其余边上的新顶点处理类似。 GPU的LOD:一般的lod,主要是cpu的静态lod
当然基于以前CPU的LOD是会降低保真度,然而基于GPU的曲面细分着色器实现LOD能克服上述问题,在工程上最大的亮点就是虚幻的nanite技术就是基于此来实现的(下面以unity的曲面细分为例子)! 曲面细分策略:固定量的曲面细分: 模型的面在屏幕上的大小大致相同,则向网格添加固定量的曲面细分(整个网格上的曲面细分级别相同); 基于距离的曲面细分:
曲面细分函数在曲面细分之前将三角形三个角的顶点数据作为其三个参数。Unity 需要此数据来计算曲面细分级别,而这取决于顶点位置 基于边长的曲面细分: Phong曲面细分:
参考资料支持 DX11/OpenGL Core 曲面细分的表面着色器 - Unity 手册 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 21:06:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |