【UE】地球光照模拟--太空视角
分析:
太阳光照射在地球上,光照的变化是有一定的规律的。
- 地球自转——一天的光照
- 地球公转——一年的光照
模型化:
为了简化整套光照系统,将地球和太阳分别用球体和定向光源模拟。所有的光照变化都可以看作是太阳围绕着地球的运动。
其中,引擎自带的球体分段数不高,比例放大容易出现棱角边缘。所以,在这里使用了另一个高分段的球体资源。
地球:
- 球状网格体
- 地球表面材质
太阳:
- 定向光源组件
- 移动-自转&公转
移动:
为了模拟真实的时间光照位置,我们需要:
1、旋转定向光源的Z(Yaw)数据,直到太阳光照刚好划分东西半球,并且东半球是明亮区域。记下此时的旋转Z(Yaw)值为InitYaw,这里为110°。
2、满足①的时候,太阳直射70°E(东五区),时间为12:00。此时,北京时间东八区(120°E),时间为15:20。
经度间隔:120°-70°=50°
时间间隔:50°×4min/°=3h20min
3、根据①和②的数据,可以得到默认情况(未修改Z(Yaw)值)时,北京时间东八区的具体时间InitTime。
时间间隔:110°*4min/°=7h20min
初始时间:15:20-7:20=8:00
4、在代码中获取当前系统时间,跟InitTime进行对比,并进行计算获得旋转分量XY_Value(地球自转分量)
5、春分和秋分的时候,地球刚好以南北极为顶点被划分为明暗半球。旋转定向光源的Y(Pitch)值,使光照刚好以南北极为顶点划分地球,一般此处不需要调整。
6、根据赤纬角的计算公式,得到系统时间下太阳直射点的改变的朝向Z_Value(地球公转分量)
赤纬角又称太阳赤纬,是地球赤道平面与太阳和地球中心的连线之间的夹角。
当日期为1月1日时,n=1,当日期为3月22日时,n=81。
δ=23.45×sin(2×PI×(284+n)/365)
代码如下:
7、将计算得到的值应用到太阳上
在这里要注意,游戏引擎内的变换旋转是“Roll, Pitch, Yaw”,但是在代码内FRotator是“Pitch, Yaw, Roll”。因此,要注意这里的调整。
代码如下:
效果
SpaceSun 虚幻编辑器 2020-08-07