法线贴图

次时代游戏用的比较多

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. Unity预计算全局光照的学习(速度优化,LightProbe,LPPV)

    1.基本参数与使用 1.1 常规介绍 使用预计算光照需要在Window/Lighting面板下找到预计算光照选项,保持勾选预计算光照并保证场景中有一个光照静态的物体 此时在编辑器内构建后,预计算光照开 ...

  2. Android动画三部曲之中的一个 View Animation &amp; LayoutAnimation

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/50612827 本篇文章对android的Tween动画和帧动画以及布局动画进行总结. ...

  3. R语言之——字符串处理函数

    nchar 取字符数量的函数 length与nchar不同,length是取向量的长度 # nchar表示字符串中的字符的个数 nchar("abcd") [1] 4 # leng ...

  4. 50x页面放到本地单独目录下,进行显示

    error_page 500 502 503 504 /50x.html; location = /50x.html { root /data0/www/html; }

  5. zabbix server 与数据库不在同一台服务器上面

    16312:20170527:095215.225 database is down: reconnecting in 10 seconds 16312:20170527:095225.225 [Z3 ...

  6. mongodb更新数组中的所有匹配项

    假如集合中有如下数据 { "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "title" : & ...

  7. Unity编辑器下,界面替换NGUI字体以及字号

    项目中有需要批量替换字体以及字号的需求,一般也就是多语言处理吧. 提供界面如下: 手机拍图,就这样凑合看吧.但是代码不打折. 紧急避让,我只提供修改UILabel以及UIPopupList 下的字体, ...

  8. 【驱动】LCD驱动(FrameBuffer)分析

    背景知识 在多媒体的推动下,彩色LCD越来越多地应用到嵌入式系统中,PDA和手机等大多都采用LCD作为显示器材,因此LCD的应用很有实际意义! LCD工作的硬件需求:要使一块LCD正常的显示文字或图像 ...

  9. ubuntu下安装与卸载软件方法

    http://www.cnblogs.com/JamyWong/archive/2009/11/19/1606442.html 1.通过deb包安装的情况:安装.deb包:代码:sudo dpkg - ...

  10. Python基本语法_强制数据类型转换

    目录 目录 前言 软件环境 Python数据类型的显式转换 显式转换的多种类型 Non-String转换为String str函数 repr str和repr的区别 eval Non-int转换为in ...