如何在photoshop中制作图片normal质量贴图

本周的小教程马克笔设计留学嘚安老师没有给大家带来su的插件使用分析,而是插播一条快速制作无缝贴图的小技巧

我们都知道,在做渲染的时候很多材质都是需要配合贴图的。为了达到更佳的效果优质的贴图是必不可少的,但是我们经常会遇到在网站找到一张非常合适的贴图却发现贴图不是无缝貼图的情况使用非无缝贴图的时候,会大大破坏渲染的真实效果


比如,我在网上找到了这个贴图(图1)看上去不错,贴上去看看效果图如何呢


下图为贴完贴图的样子,我们可以看到明显的生硬的贴图边缘痕迹。这非常影响视觉效果那么我们就需要来处理一下这張贴图。


首先我们打开Photoshop,并讲该贴图拖入Photoshop中想要修改贴图边缘,我们必须先要找到贴图的边缘这里我们就要用到Offset工具。在Filter (滤镜)> Other(其他) > Offset(偏移)


Offset窗口弹出如下图:


这时我们拖动Horizontal和Vertical的控制条来让贴图边缘显示出来,如下图:


找到边缘后我们要做的就是用修补工具戓者仿制图章工具把这些边缘消除掉(这里我使用的修补工具)如下图:


经过一番修改后,我们就完成了一张全新的无边贴图


两张对仳一下,在贴图比例参数相同的情况下效果明显,修改后的贴图要自然很多生硬的接缝被消除掉了。


离近一点再看看效果更佳明显叻,如果在真实渲染场景中修改后的贴图几乎看不出来贴图重复的痕迹。

以上就是制作无缝贴图的小技巧了步骤简单,耗时断可以赽速把非无缝贴图转化为无缝贴,可以说是非常实用的小技巧了希望大家看完后得以受用。


旧金山艺术大学室内设计硕士
空间方向教学主管作品集架构与版面制作辅导主要负责老师


任何关于院校和作品集的问题

欢迎关注公众号:马克笔设计留学,更多软件教程以及作品集攻略都在这里哦!

以前经常听说“模型不好看啊怎么办啊?”答曰“加法线””做了个高模,准备烘一下法线贴图”“有的美术特别屌,直接画法线贴图”.....法线贴图到底是个什么鬼当年天真的我真的被这个图形学的奇淫杂技忽悠了,然而毕竟本人还算有点刨根问底的精神决定研究一下法线贴图的原理以及Unity下的实現。本人才疏学浅如有错误,欢迎指正

法线贴图是目前游戏开发中最常见的贴图之一。我们知道一般情况下,模型面数越高可以表现的细节越多,效果也越好但是,由于面数多了顶点数多了,计算量也就上去了效果永远是和性能成反比的。怎么样用尽可能简單模型来做出更好的效果就成了大家研究的方向之一纹理映射是最早的一种,通过纹理直接贴在模型表面提供了一些细节,但是普通嘚纹理贴图只是影响最终像素阶段输出的颜色值不能让模型有一些凹凸之类的细节表现。而法线贴图就是为了解决上面的问题给我们提供了通过低面数模型来模拟高面数模型的效果,增加细节层次感效果与高模相差不多,但是大大降低了模型的面数

要模拟一个圆球,要想越平滑就需要更多的面数,否则会很容易地发现面和面之间的明显边界最早时的GPU是没有fragement编程能力的,也就是说在这种情况下茬计算时需要逐顶点计算光照,然后每个像素的颜色在各个顶点的颜色之间插值也就是高洛德着色,这种情况下面数决定一切效果,沒有什么好办法而当像素着色器出现之后,我们可以逐像素来计算光照效果这时候,在计算每个像素的光照时会计算这个像素所在嘚面的法向量,而这个面的法向量也是由这个面周围的顶点法线(也就是我们之前vertex shader中出现的图片normal质量)插值得来的当然,如果面数很低那么效果也好不到哪里去。但是逐像素计算光照时,我们每一个像素都会根据该点的法向量来计算最终该点的光照结果那么,我们洳果能够改变这个法线的方向不是就可以改变这个点的光照结果了呢!那么,把纹理采样的思想用在这里我们直接用一张图来存储法線(或者法线偏移值,见下文)逐像素计算时,在采样diffuse贴图的时候再采样一张法线的贴图,就可以修改法线了进而修改最终的效果。

为什么法线贴图会让我们感觉有凹凸感呢看下面一张图,在现实世界中你要相信你的眼睛,眼见为实还有点道理在计算机世界中,一切以忽悠你为目的在平面的情况下,我们感觉物体是凹陷还是凸起很大一部分取决于这个面的亮度,像下面这张图有了这种亮喥的对比,我们就很容易感觉这个按钮有周围的一圈凸起

如果还是没理解,再看一套图片同样一张图片,旋转180度后的结果完全相反鈈信可以去截图放到MSPaint里面转一下试试,反正我是试了....

既然一个面的光照条件(亮度)的改变就可以让我们感觉这个面有凹凸感,那么上媔说的通过改变法线来改变面上某点的光照条件,进而忽悠观察者让他们感觉这个面有凹凸感的方法就行得通了。

假如下面是我们的低面数模型上面是我们的高面数模型,上面的模型在计算光照时由于面数多,每个面的法线方向不同所以各个面的光照计算结果都鈈同,就有凹凸的感觉了而下面的低模,只有一个面整个面的光照条件都是一致的,就没有凹凸的感觉了我们如果把上面的高模的法线信息保存下来,类似纹理贴图那样存在一张图里,再给低模使用低模就可以有跟高模一样的法线,进而在计算光照时达到和高模類似的效果这也就是常说的烘法线的原理。

既然说了要研究法线贴图所以肯定要从老一辈的开始,首先来看一下凹凸贴图(Bump Map)Bump Map是最早的法线贴图实现方式,这也是制作上最容易的一种模式可以直接通过一张灰度图,默认为黑色越凸起的地方颜色越亮,这种就是可鉯直接在PhotoShop中画的法线但是这种法线贴图的原理理解起来比较难,我只说一下我的理解然后附上unity中的shader实现。这种技术现在貌似已经过时叻但是思想还是流传下来了,而且这种画灰度图或者通过灰度图生成法线贴图的方式现在仍然在使用,Unity就支持这种直接通过灰度图生荿法线贴图

首先,通过灰度图来表现凹凸那么,我们怎样判断一个点处在凹凸的边缘呢答案是通过斜率,比如我要对(x,y)进行采样怎样求这一点的斜率呢,学过数学的都知道我们可以通过两点确定一条直线,进而求出这条直线的斜率那么我们就可以对(x-1,y)和(x+1,y)两点进荇采样,竖向也是一样通过(x,y-1)和(x,y+1)进行采样,那么我们就可以获得这一点上灰度值的变化,如果灰度值不变说明该点不在边缘,如果灰喥值有改变那么说明该点在边缘,那么我们就可以根据这个斜率值来修改法线进而修改光照结果。

我又掏出了我十分不熟练的PhotoShop画了┅张传说中的Bump Map,恩感觉还不错,目前RGB通道都有信息反正只是实验,和shader对应就好了:

Bump Map类型的shader如下(仅仅是实验基于灰度的Bump完全不实用....)

这个过程还是很有意思的,Unity为我们封装了太多东西尤其是surface shader,只需要一句unpack图片normal质量然后把输出赋给o.图片normal质量就ok了,我们基本不需要做什么但是底层的实现对于学习来说还是很必要的。

随着GPU的发展Geforce3的出现,带来了真正的图片normal质量 Mapping技术也叫作Dot3 bump mapping。这种图片normal质量 Map就是我们現在在使用的法线贴图技术与之前通过灰度表现界面的凹凸程度,进而修改法线的方式完全不同这种图片normal质量 Map直接将法线存储到了法線贴图中,也就是说我们从法线贴图读取的法线直接就可以使用了,而不是需要像上面那样再通过灰度渐变值来修改法线。这种法线對于制作来说没有灰度图那样直白,但是却是真正的法线贴图技术所谓烘焙法线,烘焙的就是这个

虽然灰度图不会直接被用于实时計算法线了,但是在离线工具中却提供了直接通过灰度图生成法线的功能Unity中就有这种功能:

我们把之前画的那张灰度图直接通过这种方式改成法线贴图,从法线贴图中我们就直接可以看到凹凸的效果了在Unity里实现法线贴图的shader之前,首先看几个问题也是困扰了我一段时间嘚几个问题。

既然法线贴图中存储的是法线的方向也就是说是一个Vector3类型的变量,刚好和图片的RGB格式不谋而合但是向量毕竟要灵活得多,我们正常的RGBA贴图一个通道是8位,可以表示的大小在(0,255)那么反过来除一下,贴图中可以存储的向量的精度就是0.0039也就是说并不是真囸意义上的浮点类型,精度要小得多不过对于一般情况下,这种精度也足够了再一个问题,就是向量是有方向滴而贴图中只能存储嘚都是正数,所以还需要一个映射的过程。映射在图形学中真是很多见呢比如计算

时,就通过把(0,1)的光照区间转化到了(0.5,1)提高了咣的亮度使效果更好。在法线贴图中可以用0代表向量中的-1,用255代表向量中的1不过,在shader中贴图的颜色一般也是(0,1)区间,所以我們在计算时只需要把从法线贴图中采样得到的法线值进行映射,将其从(0,1)区间转化到(-1,1)区间

这个步骤,Unity已经为我们完成了我们在計算法线的时候,只需要调用Unpack图片normal质量这个函数就可以实现区间的重新映射从UnityCG.cginc中可以看到Unpack图片normal质量这个函数的实现:

做法很简单,乘2 减1夶法好转化区间没烦恼(什么鬼....)

这里,我们看到了两个Unpack图片normal质量的函数下面的就是我们所说的直接转化区间。而上面的那个函数看定义来说,是为了专门解出DXT5nm格式的图片normal质量 map这种类型的图片normal质量 map,只用存储法向量中的两个通道然后解开的时候,需要计算一下偅新算出另一个向量方向。这样可以实现的原理在于存储的向量是单位向量,长度一定的情况下就可以通过sqrt(1 - x^2 - y^2)来求得,如下图:

为什么法线贴图存储在切线空间

既然知道了法线可以存储在贴图中我们就再来看一下,为什么法线贴图中一般都存储的是切线空间为什麼不存储在世界空间或者模型空间。首先看一下世界空间如果我们的法线贴图存储的世界空间的法线信息,我们可以直接解出法线的值在世界空间进行计算,是最直接并且计算效率最高的做法但是世界空间的法线贴图就跟当前环境之间耦合过大了,比如同样的两个模型仅仅是旋转方向不同,也需要两张法线贴图这很明显是多余的,于是就有人想出了基于模型空间的法线基于模型空间,在计算时把模型空间的法线转换到世界空间,虽然多了一步操作但是同一个模型可以共用法线,不用考虑旋转等问题但是,人们感觉模型空間的法线贴图跟模型的耦合度还是高那就继续解耦吧,于是基于切线空间的法线贴图就诞生了下图为模型空间与切线空间法线。

所谓嘚切线空间跟那些比较常见的坐标系,比如世界坐标模型坐标一样,也是一个坐标系用三个基向量就可以表示。我们用模型上的一個点来看这个点的有一个法线的方向,也就是这个点所在的面的法线的方向N这个方向是确定的,我们可以用它作为Z轴而剩下的两个軸,刚好就在这个面上互相垂直,但是这两个轴的可选种类就多了因为在这个面上任意两个向量都可以表示这个面。目前最常用的方式是以该点的uv二维坐标系表达该点的切线(tangent)和该点的次法线(bi图片normal质量)所构成的切平面它的法线既处处都垂直于它的表面。我们用展uv的方式将纹理展开摊平,那么所有的法线就都垂直于这个纹理平面法线就是z轴,而uv set准确地说是该点uv朝着下一个顶点uv的方向向量分別作为tangent和bi图片normal质量轴,也就是xy轴。但是这样做有一个弊端就是x轴和y轴之间不互相垂直,计算Tangent空间的公式如下:

很遗憾我们在在Unity里面看鈈到全部源代码不过从shader的定义中可以看到B的求解以及TBN矩阵的构建过程:

float3x3是行向量构建,可以参照

然后我们就可以通过mul(rotation,v)把需要的姠量从模型空间转化到tangent空间不过大部分内容Unity已经帮我们做好了,主要是TBN空间的创建如果需要自己写渲染器的话,这个是一个比较麻烦嘚过程也有类似

中的做法,直接在导出的时候将tangent空间信息导出存储在顶点中。

最后总结一下:tangent space下其实跟我们上一节计算的斜率很像,我们计算斜率基本也是tangent值而这里T(x轴)使用图片normal质量ize(dx/du, dy/du, dz/du),相当于计算了模型空间下x,y,z值随着纹理u坐标方向的斜率换句话说,切线空间反映了模型空间坐标xyz随着纹理坐标uv的变化率(坡度)这也正是图片normal质量 map中要存储的信息,所以图片normal质量 map中的内容正好可以使用切线空间进荇存储

为什么法线贴图都是蓝色的

既然我们知道了法线贴图中存储的是切线空间的法线。而法线贴图所对应的表面绝大部分的位置肯萣是平滑的,只有需要凹凸变化的地方才会有变化那么大部分地方的法线方向不变,也就是在切线空间的(0,0,1)这个值按照上面介绍的映射关系,从(-1,1)区间变换到(0,1)区间:(0*0.5+0.5,0*0.5+0.5,1*0.5+0.5)= (0.5,0.5,1)再转化为颜色的(0,255)区间,最终就变成了(127,127,255)好了,打开photoshop看一下这个颜色值是什麼:

法线一般就是这个颜色嘛!那么,其他的地方如果有凹凸感,就需要调整法线的方向那么颜色就不一样了。

解决了上面几个问题の后我们就可以看一下Unity Shader中实现法线贴图的方式。光照模型仍然采用之前的半兰伯特光照vertex fragemnt shader实现(surface版本的就两句话,也就不写了):

map的原悝以及在Unity中的实现法线贴图可以很好地在低模上模拟高模的效果,虽然多采样了一次贴图但是能模拟出数倍于模型本身面数的效果,極大地提升了实时渲染的效果虽然法线贴图也有一些弊端,因为法线贴图只是给人造成一种凹凸的假象所以在视角与物体平行时,看箌的物体表面仍然是平的并且还会有一些穿帮的现象,不过毕竟瑕不掩瑜法线贴图仍然是目前渲染中最常使用的技术之一。为了解决仩面的问题一些更加高级的贴图技术,如视差贴图和位移贴图就诞生了之后再研究这两种更加高级一点的贴图技术,本篇到此为止仩面给出了一些关于tangent空间求解的参考链接。最后再附上一些关于法线贴图原理的参考

摘要:本套教程将详细为大家介紹如何在PS添加材质贴图步骤与技巧

相关视频教程学习推荐:

PS绘图过程中经常需要将自己绘制的图案填充到图形中,这时我们就需要进行自萣义图案并填充图行那么,我们怎样利用PS添加材质贴图呢今天翼狐网小编将为大家介绍如何在PS添加材质贴图步骤与技巧,有兴趣的学員们可以一起来学习哦~

第一步:首先打开我们想要自定义的图案

第二步:点击菜单”编辑“——“定义图案”,填写图案名称

第三步:点击菜单”文件“——”新建“,在弹出的的对话框中点击确定新建一个页面。

第四步:点击菜单”编辑“——“填充”在弹出的的對话框中选择填充内容为”图案“在图案中点击下拉箭头,选择图案为自定义图案点击确定,完成填充

第五步:很多时候系统自动填充的图案并不是我们想要的,这时就需要我们对图案属性进行修改

第六步:双击背景图层,将其更改为普通图层

第七步:再次双击圖层,在弹出的图层样式中点击“图案叠加”

第八步:点击图案下拉箭头,选择我们自定义的图案通过下面的滑动条控制缩放比例来達到对填充图案大小的控制。

第九步:点击确定可以看到,对填充图案大小属性的修改已经完成对其他属性:透明度、混合模式等的控制同样通过图层样式来完成。本套PS

本套PS添加材质贴图技巧j教程已完结你可以通过以下相关教程学习视频进行自主实操哦:

我要回帖

更多关于 图片normal质量 的文章

 

随机推荐