法线贴图

次时代游戏用的比较多

1:法线贴图是凹凸贴图技术上 的一种应用,有时也称为Dot3(仿立体)凹凸纹理贴图;
2: 法线贴图是不增加多边形的情况下,增强模型的细节;
3: 法线贴图是高精度模型导出来的一种贴图,作用到低精度jing'd度模型上面,增强低精度模型的细节同时,又能获取很好的性能;
4:法线贴图的使用:
模型资源: (1) 低精度的模型; (2)法线贴图; (3) 漫反射贴图; -->美术提供,,使用3DMark,程序员不用管

法线贴图实例

思路

  创建材质: 创建Legacy Shaders/Diffuse Legacy,Shaders/Bumped Diffuse 两个shader的材质进行比较
  法线贴图的材质类型一定要是 normalmap
  切换材质: 来观察变化和比较区别;
  代码切换材质:
  学会使用代码来切换模型的材质,实现换皮

步骤

1.创建Unity工程和文件目录,保存场景

2.把法线贴图和纹理贴图以及模型文件都复制到res文件夹下,Dinosaur.FBX模型,GRANDEB2.JPG法线,GRANDECO.JPG纹理

3.把法线贴图GRANDEB2.JPG的Texture Type设置为Normal Map法线贴图,点击Apply

4.创建一个Material文件夹或者把刚才自带的Material里面的内容删除,重新创建一个漫反射材质球叫Diffuse,设置它的shader为Legacy Shaders---->Diffuse,把纹理贴图GRANDECO.JPG拖进去

5.把模型Dinosaur.FBX拖进Scene场景中,设置节点的Metarials的Element0,Element1为Diffuse,这个是普通的效果,细节看起来很一般

6.接下来我们用法线贴图,创建一个材质球Normal,设置它的shader为Legacy Shaders---->Bumped Diffuse,把GRANDECO.JPG拖进base,把GRANDEB2.JPG拖进Normalmap里面

7.重新设置模型的Metarials的Element0,Element1为Normal材质球,这个就是法线贴图的效果,效果很逼真,模型面没有增加,但是细节提升非常多。

8.用代码实现材质的更换(常用,比如游戏中遇到某些事件物体变色等),创建脚本change_materails,关联到模型节点下

9.打开change_materails脚本

using UnityEngine;
using System.Collections; public class change_materials : MonoBehaviour {
public Material diffuse_map;//普通纹理
public Material normal_map;//法线贴图 private MeshRenderer render; private bool normal;
// Use this for initialization
void Start () {
this.normal = false;
this.render = this.GetComponent<MeshRenderer>();//获得MeshRenderer组件
this.render.materials = new Material[] { this.diffuse_map, this.diffuse_map };//设置材质为普通纹理,有几个Element,或者说size是多少,就是多大的数组
} // Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown()) {
this.normal = !this.normal;
if (this.normal) {
this.render.materials = new Material[] { this.normal_map, this.normal_map };//设置材质为法线贴图
}
else {
this.render.materials = new Material[] { this.diffuse_map, this.diffuse_map };//设置材质为法线贴图
}
}
}
}

10.运行,点击Game屏幕,切换贴图

阴影的设置

是在Light组件上设置的,也可以在Edit-->Project Settings->Quality中设置全局参数,后者的设置只有在设置自己阴影的Resolution为Use Quality Settings的Light组件才能使用

1: unity可以通过修改阴影的参数来对阴影的质量进行设置;
2: unity使用阴影贴图来显示阴影的,阴影贴图可以看作是灯光投射到场景的阴影通过纹理贴图的形式表现出来;
3: 阴影的质量取决于两个方面:

   (一) 贴图分辨率(Resolution)(二)阴影的类型(Hard/Soft);
    Resolution设置: 低质量 中等质量 高质量 极高质量,越高,越清晰,消耗也越大。
    Type: 可以设置为hard阴影和softer阴影; hard比较生硬,但是软阴影比硬阴影要消耗更多的资源。
    硬阴影是GPU运算的,不影响CPU的性能和内存,软阴影会消耗CPU,但是硬阴影的细节没有软阴影的精细,效果不好,太硬。
4: 用户将阴影设置为 Use Quality Settings使用的是全局的设置参数:全局设置参数面板这样打开Edit-->Project Settings->Quality
Edit-->Project Settings->Quality 中和阴影相关的参数。
  Shadows: 设置阴影的类型;Disable Shadows全局没有阴影,Hard Shadows Only全局只用硬阴影,Hard and Soft Shadows全局软和硬阴影都可以
  Shadow Resolution 阴影设置分辨率,分辨率越高,开销越大
  Shadow Projection 阴影投射, 平行光的投射投影有两种: Close Fit渲染高分辨率阴影, Stable Fit渲染低分辨率阴影; 
  Shadow Distance: 相机阴影可见的最大距离,超过这个距离阴影不会被计算和绘制;就是物体到摄像机的距离
  Shadow Casades : 阴影重叠,重叠数目越高,质量越好,开销越大;

阴影的优化

搞不好就是性能的瓶颈
1: 静态物体: 尽量使用光照贴图,将阴影预先烘培出来,不实时的计算阴影;
2: 设置分辨率和阴影类型,适当降低开销,硬件阴影的消耗要比软件阴影的小;
3: 设置阴影在摄像机范围的显示距离;
4:并非所有的显卡都支持硬件阴影,要做好测试;

小技巧:

打开模型的三角网格方法:

在Scene视图的菜单栏的Gizmos下面勾选Selection Wire

关于Unity中的光照(三)的更多相关文章

  1. 关于Unity中的光照(七)

    全局光照 GI 这里所说的反射就是,一个红色的物体,当太阳照射它的时候,它周围的物体也会变得有点红. 1:Realtime每帧都会计算光照,实时光照是不会反射的,所以它的光影显得单调;2:Baked ...

  2. 关于Unity中的光照(六)

    反射探头 1:镜子金属等具有光滑表面的物体都会反射,而游戏中计算实时反射非常消耗CPU的资源, unity5.0新增了一个反射探头的技术,通过采样点,生成反射Cubemap,然后通过特定的着色器从Cu ...

  3. 关于Unity中的光照(五)

    Mobile Diffuse Unity自带的一种shader,用的比较多,性能还可以.我们默认创建的unit shader基本和它一致,但是没有参与光照计算,看起来和Mobile Diffuse有区 ...

  4. 关于Unity中的光照(四)

    渲染路径和颜色空间 1:Unity光影效果可以通过设置 渲染路径和颜色空间;2: 渲染路径: 光照到物体表面,物体着色的时候,算上光的颜色的时候有这么几种光照的着色方式,计算着色的方式 forward ...

  5. 关于Unity中的光照(二)

    光源 1: 光照的本质:就是光的颜色和物体纹理的颜色的混合;2: 光源类型: 点光源,定向光源,聚光灯, 区域光源; 区域光的范围会在场景中用黄色的光显示出来; z轴是光的方向; 光的强度会随距离衰减 ...

  6. 关于Unity中的光照(一)

    一.光源定义 光源,是一个普通节点加一个Light组件,创建的时候可以直接创建光源节点,也可以先创建一个空节点,再添加Light组件实例. 二.颜色形成 看到的物体颜色受两个很重要的因素的影响,一个是 ...

  7. 【unity shaders】:Unity中的Shader及其基本框架

    shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...

  8. Unity中的ShaderToys——将大神们写的shader搬到unity中来吧

    http://lib.csdn.net/article/unity3d/38699 这篇文章翻译自国外的一篇文章(这里是原文链接),正在使用unity的你是否在shader toy上发现很多牛逼哄哄的 ...

  9. 浅析Unity中的Enlighten与混合光照

    0x00 前言 在Unity的5.6版本之前的5.x中,主要使用了Geomerics公司的Enlighten[1]来提供实时全局照明以及烘焙全局照明,在5.6之后Unity引入了新的Lightmapp ...

随机推荐

  1. django——文件上传_分页_ajax_富文本_celery

    上传文件 概述 当Django在处理文件上传时,文件的数据被存储在request.FILES属性中 FILES只有在请求的方法为POST且提交的form表单带有enctype="multip ...

  2. Duplicate &lt;http&gt; element detected

    1.错误描写叙述    org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Configuration p ...

  3. git clean 小结

    删除 一些 没有 Git add 的 文件: git clean 参数 -n 显示 将要 删除的 文件 和  目录 -f 删除 文件,-df 删除 文件 和 目录 git clean -n git c ...

  4. InfoQ 趋势报告:架构和设计领域技术演变详解

    https://www.infoq.cn/article/R7lWXd0R4VFf3E0bB*38 本文概述了我们对当前“架构和设计”领域的看法,这个领域侧重于基础设施模式.技术框架模式的实现,以及软 ...

  5. (原) windows下autohotkey的快捷键脚本编写

    autohotkey 脚本很强大,可以接受传参.能各种程序逻辑控制.还可以把脚本转换成独立执行的EXE.(安装完后程序目录下有个小程序:Convert .ahk to .exe,直接UI上转换.)总之 ...

  6. 【教程】minicom使用教程

    简介 Linux下的Minicom的功能与Windows下的超级终端功能相似,可以通过串口控制外部的硬件设备.适于在linux通过超级终端对嵌入式设备行管理.同样也可以使用minicom对外置Mode ...

  7. Mybatis根据配置文件获取session(多数据源)

    1.config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configura ...

  8. Python(七)之OS模块

    文件系统功能:os模块 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关.以下列举常用的命令: 目录: os.mkdir('/tmp/ ...

  9. SQL Server 数据库自建表

    sysobjects是系统自建的表,里面存储了在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等). 列名 数据类型 描述 name sysname 对象名 id int 对象标识号 xt ...

  10. golang包管理的取巧

    常见的golang的包管理工具 glide 使用yaml做配置,语义化版本管理,可以设置镜像,下载x系列库,但是x系列库被第三方库依赖时会出现下载失败. dep 亲儿子,语义化版本管理,无法解决墙 v ...