ps法线贴图插件_法线与置换贴图原理讲解以及烘焙制作!

10de4cb83f7c5917599b441743db22c4.png

9d888670bf0e61d20a590ba8cf77075e.png

​首先在讲解之前先给大家讲解下什么是法线贴图,法线贴图其实就是一张带有颜色的凹凸贴图,分别是有红绿蓝,三种颜色构造而成的,如下图所示:

6cfb5345aceac59cb6db1adcd38e8f30.png

每一个颜色通道分别控制了每个像素的方向,当你把法线贴图用到低解析度的模型上面,会展示出高模的细节,但是模型本身并没有发生改变。

法线贴图和我们传统的凹凸贴图并不太一样,传统的凹凸贴图只有凹和凸,但是没有不同朝向的效果,用黑色和白色来表现凹面和凸面。

法线贴图会有xyz,三个轴向的效果,分别用rgb三种颜色来进行识别,所以凹凸贴图没办法表现法线贴图一些斜面的凹凸效果,如下图:

d8aa9ba797b34ecd8e9df9a6daa37f04.png

接下来给大家看下一个底模的效果,给大家演示下导入法线贴图之后的效果,如下图:

e3da44b16cfb19203bb7fe7324fba451.png

99cde1e695271023108061e2d4a6b2ae.png

我们会发现细节增加了很多,但是其实模型本身并没有发生改变,发现贴图其实是一张伪凹凸贴图,并不是一张真正的凹凸贴图。

接下来我们再看下置换贴图,置换是一张灰度图,灰度图它是以一个膨胀来进行计算的,它是可以改变物体的一个形态的,是一张真实的凹凸贴图。

说起来大家会有点蒙圈的状态,接下来我们用一个范例给大家演示下就可以了,我们先打开一张置换贴图给大家看下,如下图:

5dbd097ecb7a4b8020b056c249dfce20.png

和我们的凹凸贴图有点相似,但是和凹凸贴图的计算方式还不太一样,置换也是有多个方向的表现的。

置换其实是一张膨胀的贴图,白色的地方代表的就是膨胀,黑色的地方代表的就是不膨胀的意思,接下来我们看下案例,如下图:

ce2dd912740bdbf3045449ae94c7e24b.png

5d52b72594ea2b1332216191df6ac465.png

我们会发现裤子的形态发生了改变,从侧面说明了置换是一张真实的凹凸贴图了,会改变物体的形状,还原真实的物体凹凸的效果。

接下来我们再看下物体的凹凸贴图,先来给大家看下凹凸贴图是什么样子的,如下图:

e8f0555b82da15a717d0a7fa182f6680.png

通过一个案例给大家演示看下,加入凹凸贴图前后的对比效果,如下图:

2192b5fec48bbd80fc274a159620ccb1.png

5c90a0c63ed6c2f82020f82dfa42f241.png

我们会发现,只是物体的表面发生了凹凸效果,物体的边缘位置是没有发生改变的,所以也是一个假的凹凸。

下面给大家说下法线和置换贴图的烘焙方法,我们通过一个高低模来给大家进行演示,如下图:

首先先给大家演示下在maya里面如何进行烘焙制作,给物体进行规范命名,如下图:

f841d3f53ca3bf6fd1afdeeeb48b7bae.png

我们会看到高模的面数会非常的多,我们需要将高模的细节映射到底模的身上,形成一张法线或者置换贴图,具体制作如下图:

c5a37faf2ffb16f8695fa135a79379f6.png

1f0be3efd5d2271b5a1cf7927eb697cb.png

这个是maya里面烘焙的界面,目标物体指的就是底模,源物体指的就是高模 ,我们分别导入物体进行制作,如下图:

0b155c65522b178d7ffc502666f9085f.png

然后在底模这里有个显示方式,方式里面有网格,封套,两者都有三个类型,我们选择封套类型就可以,可以看到包裹关系,后面的数值是封套值,不易太大。

这个数值具体情况具体而定,需要进行测试,不是固定的,用封套主要就是用来避免穿插效果。

我们先讲数值改为0进行测试,然后选择法线进行制作,下面是一些参数,我们调节下,如下图:

8c32aa44efee4eb4bc3f9f9e5b463f1c.png

4798500a980b4a7ef54db61c8f0f2da5.png

设置很简单,我们点击下烘焙就可以,看下我们烘焙好的,如下图:

a732552f49f1905201303c42fc89b85e.png

整体看上去还不错,但是在一些地方会有小的穿插效果,这些我们在ps里面就可以进行修复下就可以了,如下图:

9d888670bf0e61d20a590ba8cf77075e.png

接下来我们将封套值改为100,我们看下效果,如下图:

b0491e9e5b3274fd367dbbef215d5952.png

21c137587a26c4848767d00aeaa1ae1c.png

我们会看到出现穿插关系了,并不是我们想要的效果,所以封套值需要我们来进行测试来确定。

最终没有穿插关系就是我们想要的效果,如果略带一点点也是可以的,后期处理下就好了,如下图:

107ed7627213c3c1594be72fa0eb3789.png

接下来我们再看下置换是如何进行烘焙的,其实挺简单的,就是激活置换就可以了,如下图:

7bfe0c9680b3e823adfa41e959d690a0.png

6db0809e4502f3dbabb39cdfbfc885d6.png

设置完成之后点击烘焙就可以了,烘焙完成之后如下图:

7413ac0c373e8056ac49d537f03a736a.png

其实maya烘焙的置换效果不是特别好,我们会去到其他软件里面进行烘焙,比如xnormal,mudbox,zb等软件里面进行。

接下来我们在maya软件里面将制作好的法线连接到物体上,看下效果,如下图:

e6409efc4be883aaa1c5d90c37e5904c.png

b8b923c13d6f809ace36725dd25534f2.png

在这里切换空间一定要改一下,还有就是法线格式一定要改为raw模式,才会显示正确的效果,如下图:

8ba8e68721827716100e96311cd2ddf6.png

865dc0fd97f10f27f680a9b61568bc55.png

6f25676faeb8d15fe493d25ce6e9318d.png

我们已经看到已经显示出来了,还有大家记着把反转r通道和g通道勾选掉,才会正常显示法线。

那关于法线置换以及凹凸的区别,以及在maya软件里面如何制作法线和置换贴图就给大家讲解完了,谢谢观看!


更多干货分享 @MAYA讲师-王海鹏 的知乎专栏,也可以加王老师公众号:MAYA设计学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从向量中读取元素:

从向量中读取元素&#xff1a; 1通过下标&#xff1a; int a[6] { 1,2,3,4,5,6 }; vector<int> b(a, a 4); for (int i 0; i < b.size() - 1; i) cout << b[i] << " "; 2通过迭代器 int a[6] { 1,2,3,4,5,6 }; vector<int> b(a, …

Nim博弈

忽然发现博弈论是个很好玩的东西哎 之前假期学长讲课的时候就发现这种必胜的战略可以用来坑人做题 这两天终于做了第一道博弈论的题&#xff0c;写篇博客纪念一下 灵感来源&#xff1a;洛谷P1247 Pre-scene 众所周知&#xff0c;李明和Jenny都喜欢Danny&#xff0c;为了争夺Dan…

java调用怎么调用方法区_Java中的方法调用有多昂贵

java调用怎么调用方法区我们都去过那儿。 在查看设计不良的代码的同时&#xff0c;听听作者对人们永远不应该牺牲性能而不是设计的解释。 而且&#xff0c;您不能说服作者摆脱其500行方法&#xff0c;因为链接方法调用会破坏性能。 好吧&#xff0c;这可能在1996年左右是正确的…

python中的np array函数_numpy中的np.ascontiguousarray()函数

"Return a contiguous array (ndim > 1) in memory (C order)."用途ascontiguousarray函数将一个内存不连续存储的数组转换为内存连续存储的数组&#xff0c;使得运行速度更快。C order vs Fortran orderC order 指的是行优先的顺序(Row-major Order)&#xff0c;…

OpenCV版本

#include <opencv2/opencv.hpp>using namespace cv;void main(){/*printf("\t当前使用的opencv版本为 OpenCV"CV_VERSION);getchar();*/std::cout << "\t当前使用的opencv版本为 OpenCV" << CV_VERSION << std::endl;system(&quo…

使用jstat的JVM统计信息

过去&#xff0c;我已经写过关于Oracle和/或OpenJDK Java开发工具包&#xff08;JDK&#xff09;随附的几个命令行工具的信息&#xff0c;但是我从来没有专门写过jstat工具 。 Oracle JDK 9文档Early Access指出jstat用于“监视Java虚拟机&#xff08;JVM&#xff09;统计信息”…

每天一点点之 taro 框架开发 - taro路由及传参

1.路由 taro的路由是自带的&#xff0c;不需要我们额外配置&#xff0c;只需要我们在app.js下config中配置pages即可 class App extends Component {config {pages: [pages/test/test,pages/index/index],} } 2.taro通过api实现跳转&#xff0c;替换 官网地址&#xff1a;taro…

调用支付jsapi缺少参数:total_fee_小程序支付问题怎么解决?

微信小程序开发的过程一定会遇到各种问题&#xff0c;最让人棘手的就是支付问题&#xff0c;因为没有支付做商城类似的小程序就没有办法完成最关键的一步。那么支付失败到底什么原因呢&#xff1f;一下子收集了几个错误类似&#xff0c;希望对你有帮助&#xff1a;No.1{err_cod…

Visual Stutio中win32控制台应用程序、win32项目、MFC项目的区别:

我的理解&#xff0c;我首先把这几个货分为两大类&#xff1b;第一类包括win32控制台应用程序&#xff0c;第二类就是剩下那俩货。而剩下那俩货又有一个包含关系&#xff0c;即win32项目包含mfc。&#xff08;我个人是这个区分的。&#xff09; 一、 区别: &#xff08;1&…

二分图匹配【模板】

传送门&#xff1a; #include <cstdio> #include <cstring> #include <cmath> using namespace std; #define ll long long #define re register const int N1005; inline void read(int &a) {a0;int d1;char ch;while(chgetchar(),ch>9||ch<0)if(…

c++两个数组对比去掉重复的元素_30 数组案例

数组案例案例一&#xff1a;筛选指定数组元素要求&#xff1a;将数组[2,0,6,1,77,0,52,0,25,7]中的0去掉后&#xff0c;形成一个不包含0的新数组。var arr [2,0,6,1,77,0,52,0,25,7];var newArr [];for(var i0; i<arr.length; i){if(arr[i]!0){newArr[newArr.length]arr[i…

排序并记录排序前的索引(类似matlab sort函数)

这里用到vector比较方便。 #include<iostream> #include<vector> #include<algorithm> using namespace std; struct num_label { int num; int label; }; //自定义“大于” bool comp(const num_label &a, const num_label &b) { return a.n…

selenium实现登录百度(自动识别简单验证码)

需要做的工作 0、工程结构 1、代码&#xff1a; ①baidu_login.py 1 import re2 import os3 import sys4 import time5 import random6 from selenium import webdriver7 from PIL import Image, ImageEnhance8 import pytesseract9 from func import base642str, str2base6410…

为什么猫王不应该访问Java

最近&#xff0c;我参与了一个关于Java的Optional类型系统的漫长的Twitter讨论 &#xff0c;该系统区分可空类型和非可空类型以及Elvis运算符 &#xff0c;该运算符允许选择空值安全的成员。 后者被认为是简洁的null处理的杀手级功能&#xff0c;对此我强烈不同意。 我对此的看…

python a and b_python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更...

根据question的答案,也根据numpy的答案,与a.dot(b)相比,二维数组的矩阵乘法最好通过a b或numpy.matmul(a,b)完成.If both a and b are 2-D arrays, it is matrix multiplication, but usingmatmul or a b is preferred.我做了以下基准测试,发现相反的结果.问题&#xff1a;我的…

Mysql高可用集群-解决MMM单点故障

目录 一.理论概述组件介绍三.部署四.测试五.总结preface: MMM架构相比于MHA来说各方面都逊色不少,写这篇案例也算是整理下思路吧. 一.理论概述 MMM(Master-Master replication Manager for MySQL) 是一套支持双主日常管理的脚本程序,使用Perl语言开发,主要用来监控和管理MySQL双…

vector元素的读取

1通过下标&#xff1a; int a[6] { 1,2,3,4,5,6 }; vector<int> b(a, a 4); for (int i 0; i < b.size() - 1; i) cout << b[i] << " "; 2通过迭代器 int a[6] { 1,2,3,4,5,6 }; vector<int> b(a, a 4); for (vector<int>:…

vector 中的元素去重

#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() { cout << "********************一维向量*************************" << endl; vector<int> a; for (int i 0; i < 6; i) …

tcp的3次握手4次挥手

转载于:https://www.cnblogs.com/georgexu/p/10909808.html

python 如何定义字典_python dict如何定义

1.字典的定义字典的格式&#xff1a;字典名 {key1:value1, key2:value2,...}字典是无序的&#xff0c;是可变的数据类型字典的key不能是可变的数据类型(列表 字典)字典的key是不能重复的&#xff0c;但value可以例&#xff1a;my_dict {"name": "小明", …