| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 凹凸映射中的法线纹理贴图 -> 正文阅读 |
|
[游戏开发]凹凸映射中的法线纹理贴图 |
凹凸映射(bump mapping)凹凸映射的目的:使用一张纹理来修改模型表面的法线,让模型看上去“凹凸不平”。 主要有两种方法:一、高度纹理来模拟表面位移,得到一个修改后的法线值,称为高度映射(height mapping);二、另一种方法是使用一张法线纹理(normal map)来直接存储表面法线,这种方法称为法线映射(normal mapping) 法线映射(Normal Mapping) 描述:Normal Map是一张存有物体局部表面法线信息的一张贴图, 也就是我们常见的类似于一张浅蓝紫色的图(如图一右下角)在计算光照的时候,程序会去读取法线图,并获取到当前像素点的法线信息,结合光线信息进行光照计算。使用法线贴图计算光照,可以让物体表现出更加丰富的细节,并随着光照方向的变换实时变化。这是普通纹理贴图不能表现出的。 ????????????????????????? ????????????????????????????????????????????????????????????????????????图一 原理浅析: 法线纹理贴图即一张的浅蓝紫色的图 那么为什么是这样一张图呢?为什么这个贴图呈现出来的是大面积浅蓝紫色这样一个形态呢? 原因如下 法线纹理存储的是模型表面的法线方向,由于法线方向的分量范围在[-1,1]之间,而像素分量范围[0,1]之间,所以要将法线信息以光照颜色的形式呈现到像素上,是需要映射的,通常的映射就是: ????????????????????????????????????????????????????????????????????pixel=(normal+1)/2 在实际制作中,法线中存储的法线方向通常是在一个名为顶点模型的切线空间(tangent space)下储存法线的。 ??????????????????????????????????????????????????????????????????????????????????? ? 每一个顶点都有各自的切线空间。而颜色之所以呈现出蓝色是因为,若该点的法线信息没有被修改或扰动,那么它切线空间下的法线方向也就是z轴的方向(0,0,1),经过公式映射后pixel=(normal+1)/2就成为了(0.5,0.5,1),对应RGB是浅蓝色。 用一个非常简单的具体例子说明法线贴图: 一般在pbr建模中,直接使用一个精细的模型开销是很大的,因为精细的模型面数太多了,那么如何做到让一个模型即占用很少的存储空间又看上去很精细呢?方法是使用模型是面数较低的模型(低模),再使用ao贴图、法线贴图等等贴到模型表面上,在低模表面的添加光照、遮挡等明暗处理来使得一个模型看上去“凹凸不平”,这就两全其美了。 那么法线贴图在其中如何发挥效果呢? 如下图是一个瑞文断剑(低模模型和高模模型),低模用最少的面数体现出整体结构,高模则是面数很多,又完整细节的模型。 ??????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????????????低模 ??????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????高模 ??????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????烘培时重合高低模,将高模的法线扰动输出到法线贴图中 在八猴中渲染法线贴图,即将高模的细节(各种凹凸)烘培到法线贴图上。 高模中顶点如果相对于低模不一样,如凹进去或凸出来,那么相对于那个顶点的法线在其自己的切线空间就会发生变化即扰动方向,经过映射就会产生不一样的颜色,而如果该顶点法线方向不变,那么在它的切线空间中,新的法线方向就是z轴反向,即值为(0,0,1),映射后RGB就是(0.5,0.5,1),所以说蓝紫色意味着没有发生较大的改变,颜色越不一样的地方就是改变很大。 ?????????????????????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????????无法线贴图 ??????????????????????????????????????????????????????????????????????????????????? ??????????????????????????????????????????????????????????????????????????有法线贴图 切线空间:
参考资料《Unity Shader 入门精要》 自己对于法线纹理的一些浅显的理解,有错误恳请指正。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 18:51:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |