2017-09-02 12:04:48 dongkaixuan 阅读数 5489
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

第一章Unity环境搭建

所用软件:Unity 5.4.0f3 (64-bit)

assets文件夹最重要

Scene场景面板        

常用快捷键

1.按下鼠标滚轮拖动场景(或者拖动小手),滑动滚轮缩放场景

2.选择十字标,选定物体,按下F:居中,ALT+鼠标左键:围绕旋转 ALT+鼠标右键:缩放=滑动滚轮

3.右键加ASDWQE场景漫游 

4.按下十字标,选定物体,拖动轴:往前走=向着Z轴正方向,向右走=X轴正方向,向上走=Y轴正方向:反之负方向。拖动面:沿面移动。

5.按下双曲箭头标,是按轴旋转。

6.按下方框和四个箭头的标,是放大缩小,拖动中间白色小方框是整体按比例放大缩小。

inspector:检视面板(检查监视)显示的属性可能不准,在右上角static上边的小三杠选择Debug可以查看隐藏属性,在里面找到要修改的属性的真正名称

transform 变换组件   reset 重置

Position :位置 X 0 Y 0 Z 0     unity世界原点

Rotation :角度X 0 Y 0 Z 0     角度同世界一致

Scale:    比例 (一般X 1   Y 1   Z 1)

unity世界物体都是由小三角组成,物体越细腻小三角越多。

顶点吸附:按下V同时按下左键拖动,实现顶点吸附

视觉停留效应:0.02S以内视觉感受不到更新

2D视角:ISO正交模式3D视角:Persp 透视模式

 

基础概念

坐标

世界坐标:整个场景的固定坐标,不随物体旋转而改变

本地坐标:物体自身坐标,随旋转而改变

 

场景scene

一组相关联的游戏对象的集合,通常游戏中每个关卡就是一个场景,用于展现当前关卡中的所有物体。

 

游戏对象gameobject

-运行时出现在场景中的游戏物体。-是一种容器,可以挂载组件。

组件component(例:transform版块)

-是游戏对象的功能模块

网格过滤器:过滤形状     网格渲染器:显示形状

Ctrl+S 保存场景

Ctrl+D 复制物体

为物体添加颜色等要为物体的MeshRenderer下的material添加材质,默认材质无法修改。

 

Ctrl+1  切换到scene视图 Ctrl+2切换到Game视图  Ctrl+3切换到Inspector视图 Ctrl+4切换到Hierarchy视图

 

在播放模式下,用户对游戏场景做的所有修改都是临时的,所有的修改在退出游戏预览模式后都会被还原。

 

*重要)project(项目)包含很多scene(场景),scene包含很多gameobject(游戏对象),gameobject包含很多component(组件)<开发重点>

 

打组,一般先创建一个空物体(empty),然后再创建子物体。位置角度比例都是相对父的。

 

mesh  renderer  更改渲染   初始粉紫色,名为材质丢失

metallic 金属的   albedo 反射系数

material材质:物体的质地,指色彩、纹理、光滑度、透明度、反射率、折射率、发光度等。实际就是shader(着色)的实例。简单来说是物体的外观。

 

透明要把渲染模式renderingmedo改为transparent(透明),再调albedo(反射率)里的A

渐变要把渲染模式改为fade(渐变),再调albedo里的A

去底镂空要把渲染模式改为cutout(镂空),再调albedo里的A   

      RGBA图片可使用CUTOUT去底,RGB不可以

 

shader着色器:专门用来渲染3D图形的技术,可以使纹理以某种方式展现。 

     材质相当于shader的面板,shader是程序

texture纹理:附加到物体表面的贴图。

*重要)shader-->material-->MeshRenderer(网格渲染)    meterial-->texture纹理

                   -->color

shader要借助material才能作用到物体

摄像机

天空盒skybox

围绕整个场景的包装器,用于模拟天空的材质。

 

windos-->lighting灯光-->environment lighting环境灯光(scene会受到skybox的影响)

Tag标签  layer层    作用:分类

摄像机可以选择看见哪个层或者不看见哪个层,层也可以自己添加。

 

游戏是3D还是2D需要设置摄像机的视角为透视perspective或正交orthogonality

摄像机的far是视野范围

viewport rect  : W,H调整屏幕宽和高   X,Y调整屏幕在水平竖直方向的位置。

若两个摄像机视野重叠,则depth深度值,大的盖住小的

 

选中摄像机,按Ctrl+Shift+F,可快速让摄像机定位到当前位置,并且角度同视角一致。也可以定位别的物体。(要把输入法关闭)

让摄像机跟着模型走:创建一个空物体player,然后把模型model和摄像机作为player的子物体,并且务必把模型的transform重置,同player一致。

创建小地图:在天空放置一个摄像机向下看,然后设置该摄像机深度值depth大于模型摄像机,然后设置成2D(orthogonality)

做人物标记:在人物头顶创建一个平面,然后载入三角图片。由于主摄像机不能看见三角平面标记,则给该平面设置一个层,给摄像机设置成不看见这个层。

把摄像机属性skybox更改为depth only ,则只显示摄像机看得见的,其余部分会消失。

instantOC(面试重点)

:一个插件,包括occlusionculling LOD

包括一、渲染管线,二、occlusion culling,三、LOD

一、渲染管线 

        渲染管线:图形数据在GPU上经过运算处理,最后输出到屏幕的过程

    绘制调用Draw Call:每次引擎(CPU)准备数据并通知GPU的过程。通俗讲:每帧调用显卡渲染物体的次数。(在starts里Batches后边显示的数字)

   CPU准备数据                                     顶点处理:中间有坐标系的转换

游戏-->图形API-->CPU(决定视锥以内哪些物体需要渲染à)与GPU(显卡)分界线-->顶点处理-->图元装配(连接相邻的点组成三角面)-->光栅化(计算三角面上的像素)-->像素处理(对每个像素区域进行着色)-->缓存(一个存储像素数据的内存块,最重要的是帧缓存(常在显卡中)与深度缓存z-buffer(物体距离摄像机的距离)。)

一个物体不渲染,CPU与GPU性能都会提高。物体越多、物体精度越高,CPU与GPU性能越低。

二、occlusion culling

      即时遮挡剔除occlusion culling:在物体被渲染前,将摄像机视角内看不见的物体进行剔除,从而减少了每帧渲染数据量,提高渲染性能。(笔试考)

    默认:摄像机视锥内物体都会被渲染,即使看不见也会被渲染。

插件samples:每帧摄像机发射的射线数目,数量多会导致CPU性能降低,通常在150-500之间。

FOV :视场<-->摄像机中filed of view          View视野<-->摄像机中far   

hide delay延迟隐藏:射线发射次数。建议50帧-100帧之间。  PreCull Check,建议勾选。

遮挡剔除同时,要为物体设置一个盒子碰撞器(绿色物理边界)。为物体加一个组件-->box collider

注意:不设置碰撞器射线射不到。

遮挡剔除优点:减少渲染量。  (功能上没有损失)  缺点:CPU(射线)需要消耗额外性能。

场景里物体较多且分布较密集(被遮挡的物体多)时使用遮挡剔除。

 

三、LOD

    LOD(Level of Detail多细节层次):指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

    不会降低draw call

优点:降低非重要物体的面数与精度,从而获得高效率的渲染运算  

   缺点:CPU总需要判断距离,变换模型

适用性:1.场景中需要存在高精度模型  2.距离需要变化

步骤:1.创建层

    2.创建空物体并将模型添加到其中,模型命名:Lod_0,Lod_1,Lod_2(精度由高到低)

    3.为父物体指定层与标签

    4.父物体或子物体添加碰撞器组件

    5.摄像机附加脚本IOCcam

Lod1 distance:摄像机到物体距离小于当前距离时,使 用Lod_0模型。

Lod2 distance:摄像机到物体距离大于Lod1且小于当前 距离时,使用Lod_1模型,大于当前值使用Lod_2模型。

 

 

光照系统

    GI(Global illumination),即全局光照。能够计算直接光、间接光、环境光(ambient)以及反射光(reflection)的光照系统。通过GI算法可以使渲染出来的光更加真是丰富。

直接光照

    直接光照directional平行光和位置无关和角度有关。point点光源相当于一个灯泡,range:范围。sport聚光灯:由一个点像一个椎体照射,相当于手电筒。

物体阴影在光源选项组件里。硬阴影性能比软阴影好。阴影很消耗性能,所以需要阴影剔除。

    shadowdistance(阴影距离):如果等于40则等于距离摄像机40米以内渲染阴影,40米以外不渲染阴影。

选中个别物体,可以在组件中选择关闭阴影

环境光照

  环境光照ambient source所有物体都能感受到的光照。

作用于场景内所有物体的光照,通过EnvironmentLighting Ambient 控制。

AmbientSource 环境光源

--Skybox 通过天空盒颜色设置环境光照

--Gradient 梯度颜色

Sky 天空颜色、Equator 地平线颜色、Ground 地面颜色

--Ambient Color 纯色

AmbientIntensity 环境光强度

AmbientGI  环境光GI模式

--Realtime实时更新,环境光源会改变选择此项。

--Backed 烘焙,环境光源不会改变选择此项。

反射光照

  反射光照resolution source从天空盒中取色。

根据天空盒或立方体贴图计算的作用于所有物体的反射效果,通过EnvironmentLighting Reflection 控制。

ReflectionSource 反射源

--Skybox 天空盒

Resolution 分辨率Compression是否压缩

--Custom 自定义

Cubemap立方体贴图

ReflectionIntensity 反射强度

ReflectionBounces 使用ReflectionProbe 后允许不同游戏对象间来回反弹的次数。

间接光照

   间接光照物体表面在接受光照后反弹出来的光。(特别消耗性能)

通过Light 组件中BounceIntensity 反弹强度控制。

可以通过Scene 面板Irradiance 模式查看间接光照。

  

注意:只有标记Lightmaping Static的物体才能产生间接光。

实时GI

一、Realtime GI 实时GI:在运行期间任意修改光源,效果实时更新。(需要预计算)

 实时GI在手游里慎用,太消耗性能。

1.把场景里不动的物体标记为Static(静态的)

2.勾选precomputed(预计算) Realtime GI  

3.调整好物体点击Build(取消勾选Auto)

烘焙GI

二、烘焙GIBaked GI将光照效果做成图片贴到物体上。

    当场景包含大量物体时,实时光照和阴影对游戏性能有很大影响。使用烘焙技术,可以将光线效果预渲染成贴图再作用到物体上模拟光影,从而提高性能。   适用于在性能较低的设备上运行程序。

    需要把不动的物体设置为静态,只烘焙不动的物体。

步骤:

1. 游戏对象设置为LightmapingStatic。
2. 设置Light组件Baking属性。
3. 启用Lighting 面板的Baked GI。
4. 点击Build按钮。(在Lightling-->Scene中)(如果勾选Auto 编辑器会自动检测场 景的改动修复光照效果)
Light 组件Baking 属性:烘焙模式
--Realtime仅实时光照时起作用。
--Baked仅烘焙时起作用。
--Mixed 混合,烘焙与实时光照都起作用。
可以通过Scene 面板Baked 模式查看光照贴图。

光源侦测

三、光源侦测

由于LightMapping只能作用于static 物体,所以导致运 动的物体与场景中的光线无法融合在一起,显得非常不真 实。而LightProbes 组件可以通过Probe(侦测)收集光影信息, 然后对运动物体邻近的几个Probe 进行插值运算,最后将 光照作用到物体上。

probe不宜太少也不宜太多,太少有光变化的地方侦测不到,太多消耗性能。在光有明暗变化的地方必须要有probe探针。 

 

声音

声音分为2D、3D两类

    3D声音:有空间感,近大远小。

    2D声音:适合背景音乐。

·          在场景中产生声音,主要依靠两个重要组件:

Audio Listener 音频监听器:接收场景中音频源Audio Source(音频源)发出的声音,通过计算机的扬声器播放声音。

Audio Source 音频源

音频监听器在摄像机组件中,场景中只能有一个音频监听器。如果有多个摄像机,那只能留一个,要把别的摄像机的音频监听器组件移除remove。

 

一般游戏里声音都放在一个sounds文件夹里面。

声音组件中要勾选playon awake (运行时播放)启用声音

3D sound settings  3D声音的设置

音量衰减linear线性曲线(常用)    X轴:单位 米。Y轴:音量

min distance :最小距离(距离之内无衰减) max distance:最大距离(超过距离就没有声音)

2017-07-07 15:49:53 a18779148177 阅读数 12367
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

一、搭建简单的游戏场景

1、打开unity3d编辑器,新建一个空工程。
2、创建若干个cube对象,通过伸缩变换形成地板,墙壁以及障碍物等。
3、创建平行灯,照亮场景
4、创建一个胶囊对象,作为角色
5、在胶囊对象上添加摄像机,作为角色的眼睛,摄像机的摄像范围极为角色的视野。

创建好的场景图如下:



二、通过鼠标的移动控制角色的视野

新建脚本MouseLook.cs,编辑控制代码,并将脚本组件添加到角色对象上。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MouseLook : MonoBehaviour {

    public enum RotationAxes
    {
        MouseXAndY = 0,
        MouseX = 1,
        MouseY = 2
    }

    public RotationAxes axes = RotationAxes.MouseXAndY;
    public float sensitivityHor = 9.0f;
    public float sensitivityVert = 9.0f;

    public float minimumVert = -15.0f;
    public float maximumVert = 45.0f;

    private float _rotationX = 0;

	// Use this for initialization
	void Start () {
        Rigidbody body = GetComponent<Rigidbody>();
        if(body != null)
        {
            body.freezeRotation = true;
        }
	}
	
	// Update is called once per frame
	void Update () {
		if(axes == RotationAxes.MouseX)
        {
            //horizontal rotation here
            transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);
        }
        else if(axes == RotationAxes.MouseY)
        {
            //vertical rotation here
            _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
            _rotationX = Mathf.Clamp(_rotationX, minimumVert, maximumVert);
            float rotationY = transform.localEulerAngles.y;
            transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
        }
        else
        {
            //both horizontal and vertical rotation here
            _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
            _rotationX = Mathf.Clamp(_rotationX, minimumVert, maximumVert);
            float delta = Input.GetAxis("Mouse X") * sensitivityHor;
            float rotationY = transform.localEulerAngles.y + delta;
            transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
        }
	}
}

三、通过键盘控制角色移动

新建脚本KeyboardMove.cs,编辑代码,并将该脚本组件添加到角色对象中。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(CharacterController))]
[AddComponentMenu("Control Script/FPS Input")]
public class KeyboardMove : MonoBehaviour {

    public float speed = 6.0f;
    public float gravity = 0;
    private CharacterController _charController;     //用于引用CharacterController的变量

	// Use this for initialization
	void Start () {
        _charController = GetComponent<CharacterController>();  //使用附加到相同对象上的其他组件
	}
	
	// Update is called once per frame
	void Update () {
        float deltaX = Input.GetAxis("Horizontal") * speed;
        float deltaZ = Input.GetAxis("Vertical") * speed;
        Vector3 movement = new Vector3(deltaX, 0, deltaZ);
        movement = Vector3.ClampMagnitude(movement, speed); //将对角移动的速度限制为和沿着轴移动的速度一样
        movement.y = gravity;
        movement *= Time.deltaTime;
        movement = transform.TransformDirection(movement);  //把movement向量从本地变换为全局坐标
        _charController.Move(movement);  //告知CharacterController通过movement向量移动
	}
}


2019-08-29 09:55:28 gcc___ 阅读数 58
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

PS:干,Unity3D吧吧主在劝新人转行,吓得我赶紧学点东西。

Unity小技巧之: 快速搭建场景快捷键(开发者投稿)
原视频:https://www.bilibili.com/video/av39714384

整理一下视频中的信息

工具类快捷键:
Q:视角 W:移动 E:旋转 R:缩放 T:矩形变换 Y:wer混合
模式
Center/Pivot:中心/轴心 根据物体一个/多个 点来操作 Local/Global:自身/世界 坐标切换
便捷功能
Snap settings:按住Ctrl,使用wer功能会有一个 单位效果(单位贴齐)

表面贴合:按住Ctrl和Shift,移动物体时会倒贴临近碰撞器(注意模式
什么旋转:按住Ctrl和Shift,旋转物体时会自朝鼠标指示碰撞器(要先按自身)
顶点贴合:使用移动工具时按住V,Shift+v开关常驻(pivot模式下还能以顶点缩放,旋转)

2016-05-19 16:20:50 moonhot537 阅读数 6218
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

简介: unity3D游戏已经风靡全球,在游戏界火爆的不行,对于虚拟现实设备支持的非常好,因此具备unity开发的能力就能够驾驭任何一款头盔。本文针对大朋E2头盔的UNITY环境搭建谈谈自己的经验,记得当时买到头盔后,关于这项工作折腾了很久,现在无偿奉献给和我当初同样苦恼的初学者。

大朋头盔无非就是一个特殊的摄像头,在UNITY场景中和普通的camera没什么两样,只是在使用大朋之前需要做些驱动方面的工作。

长话短说,切入正题:

第一部:正确安装好大朋驱动

我的电脑是WIN7 X64位操作系统,拿到大朋E2之后首先安装最新版的大朋助手,确保驱动安装成功,然后把大朋模式选择上,对于想玩DK2的朋友们就得暂时忍忍了,因为我要用到大朋官网提供的unity开发包,只支持大朋模式,毕竟DK2是美国佬的,大朋是自己的技术,因此支持国产好了,重要的事项再重复下:安装大朋助手,选择大朋模式。

第二步:卸载大朋助手,安装oculus 0.6.exe

       安装oculu 0.6很关键,首先得卸载大朋助手,可能还有其他oculus的版本,但是这个版本至少很稳定,我一直使用,安装好了之后就离成功只有一部之遥了。

第三步:下载大朋官网提供的Deepoon Unity Plugin

        我使用的是大朋原来发布的,但是发现不能直接应用,经过一番修改,最终实现了漫游及观看的功能,我把调试好项目生成包,名称为DapoonUnityDemo.unitypackage,下载后把文件导入项目工程中就可以使用。使用之前不要忘记勾选对虚拟设备支持选项。

DapoonUnityDemo.unitypackage下载地址:http://download.csdn.net/detail/moonhot537/9524871

----------------------------------------------------------------

欢迎大家转载我的文章。

转载请注明:转自月亮之火

http://blog.csdn.net/moonhot537

欢迎继续关注我的博客

 

2014-03-14 10:12:45 huang9012 阅读数 7606
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

Unity3D场景搭建4: 灯光(Lights)

对于每一个场景灯光是非常重要的部分。网格和纹理定义了场景的形状和外观,而灯光定义了场景的颜色和氛围。你很可能需要在每个场景中设置多个灯光。让他们一起工作需要一点练习但是结果是非常惊人的。

可以通过从菜单中选择 GameObject->Create Other并将其添加到你的场景中。有三种类型的灯光。一旦添加了一个灯光你就可以像操作其他物体一样操作它。此外你还可以通过选择 Component->Rendering->Light为选中的物体添加一个灯光组件。

Unity3D场景搭建4:灯光(Lights)
简单的两个灯光

· 在灯光的检视面板中有许多不同的选项

Unity3D场景搭建4:灯光(Lights)
检视面板中灯光的属性

· 通过简单地改变灯光的颜色(Color),你可为场景添加完全不同的气氛。

Unity3D场景搭建4:灯光(Lights)
明亮,太阳光

Unity3D场景搭建4:灯光(Lights)
黄昏,中度光

Unity3D场景搭建4:灯光(Lights)
诡异的夜光

光照灯光将使你的游戏具有个性和情趣。使用灯光来照亮场景和物体以便创建一个完美的可视氛围。灯光可以用来模拟太阳,燃烧的火光,闪光,炮火或者爆炸,下面给出几个例子。

Unity3D场景搭建4:灯光(Lights)
灯光的检视面板

在 Unity中有三种不同类型的灯光:

• 点光源(Point lights)从一个位置向所有方向发射相同强度的光,就像灯泡一样。

• 方向光(Directional lights)放置于无穷远处并影响场景中所有的物体,就像太阳一样。

• 投射光(Spot lights)从一个点向一个方向发光,像一个车灯一样照亮一个锥形的范围。

属性

• 类型(Type):当前光照物体的类型

• 方向(Directional):一个放置在无穷远的光源。它将影响场景中的所有物体并不会衰减。

• 点(Point):一个从它的位置向所有方向发光的光源,将影响位于它的范围内的所有物体。

• 投射(Spot):照亮一个锥形(Spot Angle)的范围(Range),只有在这个区域中的物体才会受到它的影响。

• 颜色(Color):光线的颜色。

• 衰减(Attenuate):光照是否随着距离而减弱?如果禁用,物体的亮度将在进入或离开它的光照范围时突变。可以用来制作一些特殊的效果。如果是方向光这个参数将被忽略。

• 范围(Range):光线将从光源的中心发射多远

• 投射角(Spot Angle):如果是投射光,这个参数将决定圆锥的角度。

• 阴影(Shadows)(Pro only):将被该光源投射的阴影选项

• 类型(Type):Hard或 Soft阴影,Soft阴影更加的费时。

• 分辨率(Resolution):阴影的细节

• 强度(Strength):阴影的浓度。取值在 0到 1之间

• 投影(Projectio):方向光阴影的投影类型

• 恒定偏移(Constane Bias):世界单元的阴影偏移

• 物体大小偏移 (Object Size Bias):依赖于投影大小的偏移。缺省的值为投影者大小的 1%

• Cookie:你可以为灯光附加一个纹理。该纹理的 alpha通道将被作为蒙版,以决定光照在不同位置的亮度。如果光源是一个投射或方向光,这个必须是 2D纹理。如果光源是点光源,就需要一个 Cubemap。

• 绘制光晕(Draw Halo):如果选择了该选项,一个球形的光晕将被绘制光晕的半径等于范围(Range).

• 闪光(Flare):可选的用于在光照位置上渲染的闪光

• 渲染模式(Render Mode):选择光源是作为顶点光,像素光还是自动的渲染方式。详细信息参考性能考虑部分。参数包括:

• 自动(Auto):渲染方法将在运行时确定,依据附近光照的亮度和当前的品质设置 (Quality Settings)来确定

• 强制像素(Force Pixel):光照总是以每像素的品质来渲染。只将其用于非常重要的效果(例如,玩家汽车的前灯)。

• 强制顶点(Force Vertex):光照总是以顶点光来渲染。

• 裁剪蒙版(Culling Mask):用于将一组物体从光照的影响中排除;参考层部分。

细节在 Unity中有三种类型的光照,每一种都可以调整以适应你的要求。

你可以创建一个包含 alhpa通道的纹理并将它赋给光照的 Cookie变量。这个 Cookie将从光源处投影。Cookie的 alhpa蒙版乘以光照强度,在表面上创建亮的和暗的斑点。这是一种非常好的添加大量复杂效果的方法。

Unity中所有内置的 shader都可以与任何光照类型无缝融合。然而顶点光(VertexLit)shader不能显示 Cookie或阴影。

在 Unity专业版中,所有的光照都可以随意的投射阴影。通过从阴影(Shadows)属性中选择 Hard Shadows或者 Soft Shadows来完成它。参考阴影部分。

点光源

点光源从一个点向所有方向发光。这是最普通的一种光照类型,典型的用于爆炸,灯泡,等等。它们在图形处理器上花费平均成本(尽管点光源阴影是昀花费成本的)

点光源可以具有 cookie-带有 alpha通道的 Cubemap纹理。这个 Cubemap将在所有方向上投影。并且带有 Cookie的点光源将不会随着距离而衰减。

Unity3D场景搭建4:灯光(Lights)
点光源

Unity3D场景搭建4:灯光(Lights)
带有 Cookie的点光源

投射光

投影光只能在一个方向上照亮一个圆锥范围内。者可以完美的模拟手电筒,车前灯或者是光柱,在大多数显卡上这是最费时的。

Unity3D场景搭建4:灯光(Lights)
投射光

投射光也可以有一个 cookie,一个纹理投影到光的圆锥上。这可以用来创建透过窗口的光照。非常重要的是纹理的边缘必须是黑色的,需要打开 Border Mipmaps选项并且环绕模式 (wrapping mode)被设置为 Clamp。参考纹理部分。

Unity3D场景搭建4:灯光(Lights)
带有 Cookie的投射光

方向光

方向光通常用于室外场景的阳光和月光。光照将影响场景中物体的所有表面。在大多数显卡上这是昀快的。

Unity3D场景搭建4:灯光(Lights)
方向光

如果一个方向光具有一个 cookie,它将投影到光源 Z轴的中心。 Cookie的大小由 Spot Angle属性控制。在检视面板中设置 cookie纹理的缠绕模式 (wrapping mode)为重复(Repeat)。

Unity3D场景搭建4:灯光(Lights)
方向光投影一个云状的 cookie

Cookie是一个非常好的方法为室外场景添加一些细节。你甚至可以在场景的上方慢慢移动光源以模拟移动的云。

性能考虑光照可以使用两种方式来渲染:顶点(vertex)光和像素(pixel)光。顶点光仅仅在游戏模型的顶点上计算光照,并在模型的表面进行插值。像素光将计算屏幕中每个像素,因此非常费时。一些老的显卡只支持顶点光。

虽然像素渲染比较慢,但是它允许实现顶点光照不能实现的效果。凹凸贴图, cookie和实时阴影只能用像素光。透射光形状和顶点光高亮昀好使用像素模式。上诉三种类型的光使用顶点光模式时看起来如下:

Unity3D场景搭建4:灯光(Lights)
顶点光照模式的点光源

Unity3D场景搭建4:灯光(Lights)
顶点光照模式的透射光

Unity3D场景搭建4:灯光(Lights)
顶点光照模式的方向光

光照对于场景的渲染速度具有很大的影响,因此必须在光照质量和游戏速度之间进行折中。因为像素光比顶点光更加费时,Unity只以像素质量来渲染昀亮的光。实际的像素光数量可以在质量设置(Quality Settings)中设置。

你可以使用渲染模式(Render Mode)属性显示的控制使用顶点光照(Vertex)或是像素(pixel)光照。缺省情况下Unity将基于有多少个物体被光照影响来自动使用光照模式。

实际上使用像素光照是由不同场合确定的。具有高光的大物体将全部使用像素光(根据品质设置)。如果玩家距离它们很远,附近的光将使用顶点光。因此,昀好将大物体从小物体中分离出来。

创建 Cookie参考教程部分的如何创建投影光照 Coolie部分

提示

• 带有 cookie的投影光在制作从窗口投射的光线是非常有用的。这种情况下,禁用衰减,并设置范围为正好到达地面。

• 低强度的顶点光可以非常好的提供景深效果。

• 为了达到昀大性能,使用 VertexLit shader。这个 shader只能用于顶点光照,并在低端的显卡上提供高吞吐量处理。

没有更多推荐了,返回首页