8000 Unity3D入门级教程12——Camera和Light组件 · Issue #14 · Veinsvx/Blog · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Unity3D入门级教程12——Camera和Light组件 #14

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Veinsvx opened this issue Oct 26, 2020 · 0 comments
Open

Unity3D入门级教程12——Camera和Light组件 #14

Veinsvx opened this issue Oct 26, 2020 · 0 comments

Comments

@Veinsvx
Copy link
Owner
Veinsvx commented Oct 26, 2020

Unity新建场景后,场景中自带的Camera和Light组件。
一、Camera组件简介
将Camera想象成一台摄像机,摄像机拍下的画面,就是玩家所看到的画面。一个场景中至少要有一个相机,这样玩家才能看到画面。但是也可以有多个相机,利用多个相机可以创建很多特殊效果,最常见的如分屏效果。

1、创建Camera

创建一个新的Camera有三种方式:
1、菜单栏GameObject > Camera
2、Hierarchy窗口左上角的菜单Create > Camera
3、直接在Hierarchy窗口的空白处右键Create > Camera;如果在任一GameObject上右键Create > Camera,Camera会创建为这个GameObject的子物体

2、Camera位置的编辑

Camera的位置可以像编辑其他物体一样,用常用的Move Tool、Rotate Tool编辑。除此之外,还有一个非常快捷的方式进行设置。
1、在Scene视图中调整好视角
2、选中Hierarchy中的相机,点击菜单栏GameObject > Align With View(Ctrl+Shift+F),相机就会设置到对应的视角了!
image

3、Camera的属性

image
3.1 Clear Flags
Clear Flags中包含四个选项:Skybox、Solid color、Depth only、Don’t clear。
Skybox:相机的最远处会显示天空
Solid color:相机的最远处会显示下面Background属性中的颜色
image
3.2 Background
当Clear Flags不是Skybox时,相机的最远处会显示Background属性中的颜色。
当Clear Flags是Skybox时,这个属性不会生效。
image
3.3 Culling Mask
之前课程中讲的Layer
image
Culling Mask属性的下拉框中显示了所有的Layer,选中即代表这个相机会显示标记为这一Layer的物体,不选即代表相机不会显示标记为这个Layer的物体。
比如将线面场景中红框圈中的物体Layer设置为Player
image
当Culling Mask不选Player这一层后,刚才的物体在Game窗口中不显示了。
image
3.4 Projection
Projection有两个选项,Perspective和Orthographic。
Perspective(透视)
3D工程的相机默认是Perspective,即透视相机。在透视相机下有近大远小的效果。
选中Perspective时,下方会有Field of View(FOV)属性:视野的角度范围。
Orthographic(正交)
正交相机,2D工程的相机默认会是这个选项。正交相机下没有近大远小的效果。
选中Orthographic时,下方会有Size选项:视野的大小。
3.5 Clipping Planes
Clipping Planes有两个值,Near和Far,代表了相机开始渲染的点和结束渲染的点距离相机的距离。
如果Far太小,会导致远处的物体被相机截断;如果Near太大,会导致近处的物体被相机截断。
但是Far设置的太大也不好,如果你的游戏世界场景很大,会导致相机需要渲染更多的东西,影响游戏整体的性能。
Near设置的太小也不好,可能会导致物体重叠闪烁等问题(这是深度缓冲区的精度引起的)。
所以在适合你的项目情况下,Near应该尽可能大,Far应该尽可能小。
3.6 Viewport Rect
Viewport Rect属性决定了相机在屏幕上显示的位置和大小。设置Viewport Rect属性,可以创建一些效果,如分屏:
image
赛车游戏的后视镜效果
以屏幕左下角为0,0点,右上角为1,1,x和y表示位置,w和h表示宽度和高度:
image
3.7 Target Display
还记得Game窗口上有一个Display的选项么?那个选项就是和这个Camera的Target Display属性对应的。
这个选项代表了摄像机会渲染到哪个显示器上。如果你的游戏为多显示器进行了特殊设计,记得设置这个选项。
调试时,可以在Game窗口设置对应的Display。
小提示
Game窗口是可以打开多个的,有多个Display时可以打开多个Game窗口来同时查看效果。
image

二、Light(灯光)
灯光是每个场景的重要组成部分,就像现实世界的太阳和电灯一样。虽然模型、贴图决定了场景的形状和外观,但是灯光决定了3D环境的颜色和氛围。
每个场景可以使用多个灯光来达到更好的效果。使用多个灯光时,调节参数相对会难一些,需要你多亲自动手。

1、创建Light

和创建其他GameObject类似,从GameObject或Hierarchy的Create菜单可以创建Light。
image

2、Directional Light(平行光)

新建工程的场景中会有一个Directional Light,我们也可以自己添加多个平行光。
平行光类似现实世界的太阳,可以认为它的光源在无限远处,所以平行光的位置不会影响光照的效果,只有它的旋转会影响光照的结果。因此平行光可以放在场景中的任意位置,它的亮度也不会衰减。在游戏中,一般会用一个平行光作为主光源,可选几个平行光作为辅光源。

2.1 平行光的参数
image
• Type 类型:即灯光的类型,平行光是Directional
• Color 光源颜色:光源发射的光的颜色
• Mode 类型:Realtime(实时), Mixed(混合) 或 Baked(烘焙)。
• Intensity 亮度:光源的亮度,比如20W的灯泡和100W的灯泡亮度就不同。
• Indrect Multiplier 反射系数,光影烘焙模块时会详细讲解。
• Shadow Type 阴影类型,光影烘焙时会详细讲解。
• Cookie 遮光片:可以通过一张图片来实现遮住光源的效果,类似手影的效果。
image
• Draw Halo :设置是否显示光源的光晕,颜色和光源颜色一致。也可以通过单独的Halo组件设置光晕的颜色和大小。
image
• Flare 光斑:设置这个可以设置如太阳的光斑、路灯的光斑等。
image
太阳的光斑效果Settings > Quality)自动确定渲染方式
○ Important 重要:重要模式下,灯光会以像素光的方式渲染(效果好),但是会非常消耗计算资源,建议仅在最重要的效果下使用Important模式。
○ Not Important 不重要:始终使用顶点光渲染(速度快)
• Culling Mask 剔除掩码:设置光源会照射到的Layer,选中的Layer会被灯光影响,没选中的不会被灯光照到

3、Point Light(点光源)

点光源类似现实世界中的一盏灯,均匀地向各个方向发出光线。亮度会随着距离光源的距离而降低。亮度与距光源距离的平方成反比,与光在现实世界中的表现类似。
image
3.1 点光源的属性
image
点光源的属性和平行光基本一致,多了一个Range属性。
Range 光照的范围,光照的亮度会随着与光源的距离减弱,距离为Range时衰减为0。

4、Spot Light(聚光灯)

聚光灯类似现实世界的手电筒、汽车大灯、舞台追光,有半径和范围,亮度在该范围内衰减。
image
聚光灯是一个锥形的照明区域。锥体的中心指向灯光物体的正前方(local的Z轴方向)。灯光的锥体边缘亮度也会减弱。
image
Spot Light有两个特殊的属性:
Range 锥形区域的半径
Spot Angle 锥形区域的角度

5、Area Light(区域灯)

Area Light不能用于实时渲染,只能用于烘焙光照贴图,这是因为Area Light计算量非常大,实时运算会严重影响性能。具体用法会在光影烘焙模块讲解。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant
0