




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学IT技能上我学院网Unity3D NormalMap法线贴图简介什么是法线贴图?在游戏中,如果角色或物体模型做的越精细(面数越多),那么渲染后效果也就越好,但很多时候处于对时间成本而通过其它的一些技术手段来达到相似的效果.而应用的最广泛的可能就要数法线贴图了,在有光照的环境下,如果物体表面是凹凸不平的,那么它在接受光照的时候在不同的区域就会呈现出不同的明暗效果来展现这种凹凸感。我们介绍过漫反射和镜面反射的计算中我们都用到了物体表面的法线,正因为物体表面法线的不同才导致了最终光照结果的不同,如果我们能够把整个模型表面各个位置的法线映射到一张二维贴图上,然后在这张贴图上存储上法线的信息,不就可以达到通过底模+二维贴图达到高模效果了么?而这里的二维贴图就是我们所说的法线贴图.为什么叫它法线贴图呢?它和我们之前一直使用的纹理贴图有何区别呢?纹理贴图中我们存储的是颜色值RGBA,而法线贴图里存储的是物体表面的法线,两类贴图的读取映射方式都是一致的,都是通过顶点自带信息里的texcoord里的uv坐标来读取,不过法线读取之后并不能直接使用,还要经过一些处理,我们会在后面说.下面在正式进入代码之前,我们先来了解几个知识点,很重要。1.切线空间这个概念并不是十分好理解,但只要仔细想想也是可以弄清楚的。我想大家对本地空间一定不陌生,一般美术做完的模型里面每个顶点的坐标都是本地坐标,也就是说对于模型上的各个部位共用一个一个统一的坐标原点,但有时候这样并不是很方便,比如建了一个人体模型,如果我们只是想以相对手为基准而进行一些动作,而不是坐标原点,这时候原本的本地坐标系便不再适应。我们可以以手臂为基准再建立一个坐标系。综上不难理解,之所以存在不同的坐标系,根本上是为了方便我们只考虑相关的因素,而排除不相关的因素。就像如果我想以手为基准进行一个弯手指的操作是不需要考虑我这个手指在模型空间的位置坐标的,这样有效的降低了问题的复杂度。而切线空间的概念提出也是为了方便使用法线贴图(当然了也许有其他用途)。下面结合图(图片来源CSDN作者BonChoix)来说一下:其实纹理坐标可以以一个三角面作为一个单位来分析,在一个三角面上的三个顶点他们都拥有自己的纹理坐标,而又因为三点确定一个平面(前提是三点不在一条直线啊),那么纹理坐标其实也就是个二维空间的坐标(一般横轴是u,纵轴是v)。那对于一个三角面来说,其上的三个顶点所拥有的切线和法线(图中T和N)其实是一样的,通过叉乘我们可以求得笛卡尔坐标系中的两一个坐标轴B(Binormal,一般称之为负法线).实际上纹理坐标上的u对应的就是切线方向,而V对应的就是负法线方向。法线贴图上存储的法线信息也就是对应的这个三维空间。这个地方比较绕,我说的也不是很清楚,大家结合图好好理解一下吧。2.DXT5nm压缩格式美术做出来的一张法线贴图一般来说使用的RGB三个通道的,分别用来存放法线的XYZ三个轴向的坐标。但是Unity在导入法线贴图的时候会自动将法线贴图压缩成DXT5nm格式,这个格式的好处是它只使用ag两个通道来存放两个轴向的坐标值而另外一个轴向的坐标值由于是单位坐标可以通过1减去另外前两个轴向坐标的平方和来得到,从而可以以同样的容量存放更大尺寸的法线贴图,我们都知道图片的颜色通道存的都是非负数(法线贴图生成的时候已经把-1,1压缩为0-1),而我们的三维空间是-1,1,以我们要把它解析放大一下,方法就是对对应的颜色通道值乘以2再减1,有一点要额外说明,如果你是针对移动平台来开发游戏那么Unity不会为你压缩法线贴图,这意味着你还要使用RGB通道来解析法线贴图。至于他为什么呈现蓝色,因为贴图本身还是用RGB来存的,而其中B通道对应的是z轴的方向,代表三角面的法线方向,一般来说一个片段对应的法线知识于平面法线方向有少许偏移,所以z还是接近于1的所以说会呈现出蓝色。下面我们进行实例代码的分析:Shader Esfog/NormalMapProperties_MainTex (Base (RGB), 2D) = white _NormalMap(NormalMap,2D) = Bump_SpecColor(SpecularColor,Color) = (1,1,1,1)_Shininess(Shininess,Float) = 10SubShaderPassTags LightMode=ForwardBase CGPROGRAM#pragma vertex vert#pragma fragment frag#include UnityCG.cgincuniform sampler2D _MainTex;uniform sampler2D _NormalMap;uniform float4 _SpecColor;uniform float _Shininess;uniform float4 _LightColor0;struct VertexOutputfloat4 pos:SV_POSITION;float2 uv:TEXCOORD0;float3 lightDir:TEXCOORD1;float3 viewDir:TEXCOORD2;VertexOutput vert(appdata_tan v)VertexOutput o;o.pos = mul(UNITY_MATRIX_MVP,v.vertex);o.uv = v.texcoord.xy;float3 normal = v.normal;float3 tangent = v.tangent;float3 binormal= cross(v.normal,v.tangent.xyz) * v.tangent.w;float3x3 Object2TangentMatrix = float3x3(tangent,binormal,normal);o.lightDir = mul(Object2TangentMatrix,ObjSpaceLightDir(v.vertex);o.viewDir = mul(Object2TangentMatrix,ObjSpaceViewDir(v.vertex);return o;float4 frag(VertexOutput input):COLORfloat3 lightDir = normalize(input.lightDir);float3 viewDir = normalize(input.viewDir);float4 encodedNormal = tex2D(_NormalMap,input.uv);float3 normal = float3(2.0*encodedNormal.ag - 1,0.0);normal.z = sqrt(1 - dot(normal,normal);float4 texColor = tex2D(_MainTex,input.uv);float3 ambient = texColor.rgb * UNITY_LIGHTMODEL_AMBIENT.rgb;float3 diffuseReflection = texColor.rgb * _LightColor0.rgb * max(0,dot(normal,lightDir);float facing;if(dot(normal,lightDir)0)facing = 0;elsefacing = 1;float3 specularRelection = _SpecColor.rgb * _LightColor0.rgb * facing * pow(max(0,dot(reflect(-lightDir,normal),viewDir),_Shininess);return float4(ambient + diffuseReflection + specularRelection,1);ENDCGFallBack Diffuse其中一部分内容与上几节中已经提到,这里只解释本节新内容部分。第6行,由于这节中我需要额外一张法线贴图,所以我们在Properties中定义一个新的变量来存放贴图。与定义存放纹理贴图的变量方式没什么区别。第3031行,之前说过计算光照在任何一个空间都可以,只要参与计算的点和向量都是在同一空间内的就可以。我们在VertexOutput里定义这两个变量,是为了在切线空间下的入射光方向以及视线方向。这里要解释一下为什么选择了切线空间来计算。主要是考虑的计算量对效率的影响,如果我们在世界空间内进行计算(当然你也可以在其他空间,比如视图空间等等),那么我们要生成一个从世界空间到切线空间的变换矩阵,由于在顶点着色器中我们无法进行纹理读取tex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手术间参观人员管理方案
- 2025至2030中国全球板球和曲棍球行业产业运行态势及投资规划深度研究报告
- 中风患者康复期饮食护理
- 私立幼儿园教育信息化建设与股权投资协议
- 济南房产交易合同:物业管理权移交协议
- 创新性离婚协议样本:共同财产与债务分担方案解析
- 砂石料回收再利用合同范本与资源循环利用策略
- 传染性单核细胞增多症护理
- 婚姻解除房产分割及子女抚养权明确协议书
- 血液净化科年终总结
- 征信数据纠正服务合同
- 足球比赛-开幕式组织方案
- 电梯施工安全技术交底
- 高等传热学全册课件
- 2024年华东电力设计院限公司校园招聘高频考题难、易错点模拟试题(共500题)附带答案详解
- 《宠物护理与美容技术》课件-染色
- DL-T+5220-2021-10kV及以下架空配电线路设计规范
- 贷款展期协议书范本
- 《环境生物技术》课件
- GB/T 10599-2023多绳摩擦式提升机
- 2012湖北公务员职位表
评论
0/150
提交评论