GDPU unity游戏开发 光照与地形

 在你藏着的那个角落,会有一束光照进来的。

地形绘制

1. 从资源商店里获取Mini First Person Controller、Terrain Sample Asset Pack和Realistic Tree 9 [Rainbow Tree]三个包。

2. 创建一个地形,将地形大小设置为200*200。

3. 利用后两个包的资源创建一个场景和地形,要求地形有起伏、有适当的地面纹理、有草和树。

4. 使用导入的第一个包中的First Person Controller Minimal预制体,实现场景的浏览。

5. 附件截图仅供参考,地形内容自由发挥。

先找到相应的包进行导入,然后在场景中新建一个地形。

 点击这个地形,你会在inspector面板中发现地形组件。首先这个是用来扩展地形的。

 

接着这个用于设置地形的长度宽度等属性。 

然后组件中间的带有笔刷的是用来绘制的, 分别为绘制地形、种树、种草。

 

这里是用paint texture点击edit layer,然后add layer选素材即可。接着tiling 中的size改一下贴图更明显。

然后选raise or lower terrain进行拉高或降低地形,选中你所需要的笔刷,调节大小及透明度等,在scene点击或拖动即可进行升高绘制,按住shift为降低。

 

还有一些刨洞及平滑山脉等,都是用笔刷绘制地形,方法差别不大。

点edit tree进行加树,然后笔刷大小、树的高度、密度这些调一下。

 

点击edit details选add grass texture,进行种草跟种花,注意颜色可以设置的。

通过地形组件进行摆放后,把下好的第一视角角色控制器放在场景中去。 

然后点击运行即可漫游你设计的地形了。

 

光照系统  

1. 新建一个场景,使用cube和plane创建一个四面墙的房子(有地板和天花板,只有一个方向无墙壁)。

2. 将全局光照菜单中的天空盒设置为None,并删除场景中的平行光。

3. 设置一个聚光灯,将附件中的校徽投影到正面墙上。

4. 将左边墙壁设置为自发光体,给右边墙壁加上合适大小的面光源实现照明,左右使用不同的颜色,然后给房间内加上light probe组并调节数量和位置,在房间中央放置一个球体,通过键盘控制球的左右移动来呈现灯光的变化。

简述几种不同的光源:

点光源: 点光源是从一个点向所有方向发射光线的灯光。它可以模拟球形光照效果,如电灯泡或蜡烛的光照。点光源的强度随着距离的增加而逐渐减弱。

平行灯: 平行灯是一种平行于某个方向发射光线的灯光,通常用于模拟太阳光。平行灯的光线是平行且不会随着距离的增加而减弱的,因此可以产生长距离的光照效果。

聚光灯: 聚光灯是一种具有可调节角度和强度的灯光,可以模拟手电筒或舞台聚光灯的效果。聚光灯可以投射锥形光束,光照范围内的物体会受到聚光灯的照射。

面光源: 面光源是一种模拟大面积光线的灯光,可以用来模拟窗户或灯带等广泛照明效果。面光源可以设置形状和大小,可以产生柔和、均匀的光照效果。

 

先搭建属于你的小房子,然后点击light面板中把默认的天空盒背景设置为none,接着把场景中的directional light删去,这时候,“天黑了,请闭眼”,看到黑色的盒子是正常的。

接着创建一个聚光灯,把图片改为cookie即剪影类型,然后在聚光灯的light组件设置好cookie及角度、亮度、范围等属性,移动位置,让它投到正面墙上。

然后就是设置自发光材质球,设置好emission跟hdr,把它拖到做左边墙。

 

 再选中右边墙给它加面光源组件,调整光源属性。

 

然后光照烘培贴图是作用于静态物体,把现有场景内的物体都可勾选static。 

 

那如果想让动态的物体也被烘培到怎么处理,这就要用到光照探针了。新建一个小球在你的小黑屋中央,这个不用勾选static。然后新建光照探针组,再选中它,在inspector面板可以选择编辑点移动等操作。

 

 

这里摆放的位置是有点说法的,但考虑到小白更想知道怎么发光,因此记一下,在明暗交界处放几个点,点越多越精确,但过多会影响性能,可以参考一下,这里用了三组探针。

看一下你的小黑屋吧。

 

然后进行灯光渲染,点击generate lighting。

通过键盘移动小球看小球灯光的变化,其实在scene面板手动拖也行,多移几下,你会发现小球受探针的影响也在不断发生变化,这个光照变化还是挺好看的。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class move : MonoBehaviour
{
    public float moveSpeed = 5.0f; // 移动速度

    void Update()
    {
        //默认全局坐标系
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(horizontalInput, 0.0f, verticalInput);
        //默认局部坐标系
        transform.Translate(movement * moveSpeed * Time.deltaTime);
    }
}

 

实验心得

你的支持是更新的动力。 

 

 

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值