UE5阶段性学习笔记1

Meshes, Materials, textures之间的区别

这里有一个描述比较好的资料

https://forums.unrealengine.com/t/static-meshes-vs-textures-vs-materials/53090

Meshes are the actual geometry, they require a material to define what the surface looks like (color, reflectivity, etc.) Textures are just image files that are used within the material, so you could have an image that you make in Photoshop that you plug into a material that gets applied to a mesh. The Mesh uses something called UVW mapping, which is where the 3D model has a set of coordinates where it is flattened out so that it can use a 2D image as a texture, UVW is simply a way to refer to texturing coordinates (XYZ = UVW). In a 3D program like Blender/Maya/3ds Max they each have their own way of making materials and applying them to a 3D mesh. Usually each program has a very simple type of material that has basic features like color and if you use those basic materials on your 3D model then when you export to UE4 it can import those materials.

总结为: 1. Meshes是空间概念, 是几何形体, 直译是网格 2. material是光学概念, 他决定了网格的样式, 直译是材质 3. texture是material所需要的图像文件, 直译是纹理, 也就是说材质包含了纹理, 法线贴图也属于纹理, 各种纹理的有机结合形成了材质

法线贴图的原理

这部分内容unity文档写的比UE文档清晰明了(因为配有清晰的示意图)

链接 https://docs.unity3d.com/cn/2021.1/Manual/StandardShaderMaterialParameterNormalMap.html

法线贴图被称之为normal map

首先unity官方解释了另一个概念, 称之为平滑着色

对于一个网格几何体, 其俯视图如下, 在不应用平滑着色时, 其表面法线标注如下

image-20230502190237603

注意三角形边缘的表面法线向量示意箭头

上述网格几何体的渲染图如下

image-20230502190343615

如果启用了平滑着色功能,

4C0579885F450AD1E6BBCF33C396ED58

边缘处的法线会变成红色向量所示

绿色线条和蓝色线条分别是unity官方和我自己画的示意线条, 用于示意渲染结果, 下图是渲染结果, 可以看到平滑的渲染结果

image-20230502190904345

需要注意的是, 当沿着掠射角(几乎垂直于法线的观察方向)观察上述物体时, 上述物体的渲染结果依旧是棱角分明的(大多数角度是正常的圆柱体渲染结果), 因为我们并没有实际修改mesh 只是修改了法线, 俯视图中的示意线条展现的印象曲面并不存在, 他是由于法线的渐变形成的观察印象

如果将上述技术更进一步的修改, 得到法线贴图

image-20230502191254253

法线贴图需要为每个像素点存储两个性质,

第一个性质是上图中下半部分所展示的橙色的单位向量, 这个单位向量描述了法线的方向

第二个性质是蓝色-红色格子所示意的每个像素深度(或者说是高度)信息

这两个信息结合起来就可以描述法线的修正, 因为法线也是一个向量, 描述向量只需要两个标量, 一个是方向一个是长度

需要注意的是, 法线贴图虽然看起来是蓝色的, 但是他不影响任何颜色, 他只会影响法线, 从而间接影响光照计算

法线贴图呈现蓝色的原因是 法线贴图采用和普通图片几乎相同的物理存储方式--他采用RGB记录高度和方向数据, RGB分别代表了空间中的xyz数据, 其中Z表示"向外", "(本地坐标系的)向上"

存储的RGB值(x,y,z)会映射为法线数据(2x-1,2y-1,2z-1)

(至于为什么这样映射, 这是和值域定义域范围有关的, 不展开)

所以RGB 值 (0.5, 0.5, 1) 或十六进制的 #8080FF 将得到矢量 (0,0,1) 表示模型表面没有变化, 上述颜色如下所示, 呈现为蓝色

#8080FF

高度贴图和法线贴图的区别

法线贴图高度贴图都是凹凸贴图的类型

法线贴图更好, 因为法线贴图可以在描述相同视觉高度的同时, 比高度贴图额外描述光线角度信息, 这一性质用于柔滑边缘光照, 对于金属材质而言, 这一操作尤其可以增加真实性

左图采用了高度贴图, 右图采用了法线贴图 注意看枪支屁股处的环状金属结构边缘的反光, 以及强制握把、弹匣边缘的反光, 这种边缘柔化需要提供角度信息(这样才可以直接控制光照角度) 这样也可以在完全直角的(现代建模软件的直线边缘都是细粒度为0的 原文是in CG, everything has an infinitely sharp edge since each line has zero thickness.) 边缘上 展现出斜角效果(https://cgcookie.com/posts/top-5-blender-modeling-tools-to-make-anything)

为什么需要提供角度信息? 因为我们把无限锐利的 大小为1像素的边缘, 编程了一个(假设)三像素大小的斜边从而展现斜角效果, 那么这个多出来的两个像素,如果采用高度贴图, 这会导致产生漫反射光线, 并不能控制反射方向, 但是法线贴图就可以指定反射方向了, 我们虽然要柔滑边缘产生斜角效果,但是斜角处我们还是希望形成一个相对锐利的斜角, 必须控制光线方向才可以做到这点

(图源https://cgcookie.com/posts/normal-vs-displacement-mapping-why-games-use-normals )

image-20230502200238456
image-20230502194259207

最后一个问题 法线贴图是从哪来的, 答案是建模师搞得, 他需要建模时导出法线贴图

(待补充)

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2019-2024 kier Val
  • Visitors: | Views: