找回密码
 立即注册
查看: 458|回复: 1

unity沙漠场景和昼夜程序化天空盒子

[复制链接]
发表于 2023-3-30 16:27 | 显示全部楼层 |阅读模式
希望能找到一个暑期实习,捞捞呜呜,沙漠和昼夜天空盒子都是比较简单的版本,希望大家多多指教!!
<hr/>先放一下效果图:




白天整体场景效果



夜晚场景效果



加入热浪后处理效果

制作过程

一、实现技术点总览



图1:技术点汇总

二、使用素材
l 2.1贴图素材
2.1.1天空盒素材



云层Noise



镜头光晕素材

2.1.2沙漠贴图素材



可供选择的沙漠材质贴图

2.1.3后处理素材



后处理波纹

l 2.2模型素材



模型

三、前期准备
我们需要完成的部分基本包括天空,沙地以及大气部分,重点要求沙漠的材质体现,这里我们最后再说,那么综合来说,根据我个人的能力情况,我想要实现的技术点包括:动态天空盒+沙漠材质表现+大气散射,但是由于后期问题,将大气散射部分改成了雾效+后处理热浪,现在理论存在,实践开始:
四、技术点实现细节
l 4.1程序化天空盒子
4.1.1日月绘制
首先,平行光在unity可以进行旋转实现内置天空盒子的昼夜变换,光的指向方向和反方向就是我们进行日月绘制的地方,这里为了确定日月位置我们需要知道日月距离我们的远近以及日月的大小,我们通过测试,发现返回i.uv.xyz可以获得一个圆,于是:


同时我们将其边缘模糊,形成太阳自然光晕的效果
月亮的绘制同理:


4.1.2渐变天空
现在场景中出现了太阳和月亮,但是除了这两个部分,背景都还是黑色,所以我们需要随时间变换的黑天和白天两种颜色
颜色的变换方案有很多种,因为真实的天空颜色变换是很复杂的,而这里我们简单的使用了多次插值实现对天空颜色的控制(可以优化),同时根据世界坐标的y值来判断白天黑夜的颜色变换


4.1.3地平线
我们仔细观察unity自带的天空盒子,会发现他使用了一个包围式的白色圆环带充当水平线,实现天空尽头和地面尽头交接的感觉,我们根绝日夜判定不同的地平线颜色,模糊上下边界


4.1.4太阳曝光
太阳在缓慢升起到天空的一瞬间,会产生曝光,这里属于大气散射的一部分,这里我们对其进行简化,使用的是直接在太阳后面生成一个大大光圈,模拟曝光


4.1.5单层云朵
使用了云层noise图,将云层贴到世界的xz平面上并只在y轴上半部分显示,同时进行clamp裁剪得到不规则的云朵形状,并让他进行流动


4.1.6单层云朵处理
经过4.1.5,我们得到了不规则的硬边缘,而且形状单一,缺少灵动感,所以我们分别使用两张贴图对她进行扭曲和破碎,调整参数形成我们想要的灵动效果,最后将得到的所有硬边缘进行平滑操作,更加有云絮感



4.1.7多层云朵层次和色彩
我们复制多层4.1.6获得的云朵,通过不同的cutoof得到不同的云层形状,根据不同的层次选择不同的云层颜色,使云层更加蓬松


4.1.8镜头光晕
沙漠由于太阳的直射和空气传播的特殊性,会很容易的出现镜头光晕,这里我们使用的镜头光晕贴图(如图)生成了一个flare,并将镜头炫光加入到场景直射光中,得到如下效果



镜头光晕效果

l 4.2风格化沙地
4.2.1基本明暗的处理
这里我们没有使用半兰伯特模型,我使用的是OrenNayar模型,这个模型的明暗过渡更加鲜明,粗糙的表面通常会随着光照方向接近观察方向变得更亮,这个是基于v形状的微表面,使用球形高斯分布参数和一个光线和视线的夹角来进行描述


但是为了符合沙漠风格,对最后的结果进行一个插值,避免死黑


4.2.2沙丘表面纹理混合
我们观察沙丘纹理,他的条纹不仅仅是一种,为了营造这种破碎的地形的感觉我们对法线进行了混合,将多个方向的法线进行进行斜度方向的分解,然后对xz方向进行平滑


4.2.3表面风格化高光
这里参考了很多沙漠的图片,感觉沙子在风的吹拂下会很平滑,可以适当的反射一些高光,但是这个高光应该是零散的,那么根据我们由4.2.2对沙丘的表面纹理处理,我们直接选择blinn模型进行高光的模拟


4.2.4细节闪片流动
由于沙子中有细小的白色砂子,形成了细小的透镜,在阳光下会散射出五颜六色的光,所以我们需要一个噪点图,来透射出沙子的质感,这里可以添加随机函数对亮片的出现分布进行调整


4.2.5雾效(模拟大气散射)
这里我们想要模拟大气散射效果,将场景营造出雾蒙蒙的感觉,这里我们在创建shader的时候就使用的自带雾效的unlitshader,在最后加入一点雾效,并控制颜色


l 4.3热浪处理
我们选择一张噪点热浪云图,并新建一个shader,实现该噪点图对一个材质的干扰流动


新建一个脚本,进行图像特效,使用了Rt进行叠加,并对主图的扭曲和移动进行控制


五、总结
基本效果完成了,为了烘托氛围,制作了一个程序化天空盒子,天空盒子的制作过程还有很多需要更新和调整的地方,包括真实的日月贴图以及日月自转,月亮阴晴变化,天空渐变色的函数控制,以及我一直想要完成的大气散射等等,都是可以修改进步的地方,沙漠的材质也存在一些问题,比如说纹理混合,简单的lerp的效果看上去还有很多可以提升的空间,以及最后通过噪声生成新的细碎高光,可以通过插入一些随机生成的函数来控制高光出现的地方和效果,使沙漠的场景更加真实等等
六、参考资料

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2023-3-30 16:30 | 显示全部楼层
wow~
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 21:31 , Processed in 0.102462 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表