351 lines
12 KiB
Markdown
351 lines
12 KiB
Markdown
地平线的世界设计
|
||
|
||
1、开方世界——玩家有很大的探索区域
|
||
|
||
2、昼夜循环
|
||
|
||
3、动态天气
|
||
|
||
4、史诗般的场景
|
||
|
||
5、天空是地形的一部分
|
||
|
||
|
||
|
||
•地平线是一个巨大的开放世界,你可以去任何你看到的地方,包括山顶。(我表示呵呵,这个已经被吐槽,真正做到的只有荒野之息了)
|
||
|
||
•由于这是一个活生生的现实世界,我们模拟地球的自转周期。
|
||
|
||
•天气是环境的一部分,因此它也会发生变化和演变。
|
||
|
||
•有很多史诗般的风景:高山,森林,平原和湖泊。
|
||
|
||
•天空是地平线的一个重要组成部分。他们占了屏幕的一半。天空也是故事和世界建筑的重要组成部分。
|
||
|
||
五
|
||
|
||
|
||
|
||
云的实现目标
|
||
|
||
1、美术方面的可操控性
|
||
|
||
2、真实性(需要实现多种云的类型)
|
||
|
||
3、与天气继承
|
||
|
||
4、可移动的
|
||
|
||
5、EPIC:叫我干什么?
|
||
|
||
|
||
|
||
早期的模拟方案:
|
||
|
||
1、使用流体解算器,(MAYA、houdini),效果很好。但是工作室模拟云彩的经验比较少……说到底就是没钱请不来影视特效大佬
|
||
|
||
2、使用简单的几何体配合体素,然后运行流体解算器直到他们像云。
|
||
|
||
3、然后我们开发了一种照明模型,用于预先计算主和次散射。在Houdini完成解算需要10S时间
|
||
|
||
4、把云转换层多边形,烘培了光照等数据。再使用Billboards————缺点:无法轻易生成云阴影(本人表示严重质疑)
|
||
|
||
5、我们试着把我们所有的voxel云作为一个云来生产,它也可以混入大气层。类型的工作。在这一点上,我们后退一步,来评估什么行不通。没有一个解决方案使云随着时间的推移而进化。没有一种好的方法可以使云层通过头顶。并且对所有方法都有很高的内存使用和透支。所以,也许传统的基于资产的方法是不可取的。
|
||
|
||
6、于是开始考虑体素云了
|
||
|
||
7、所以我们进入了Houdini,并从模拟的云形状中生成了一些3d纹理。使用Houdini的GL扩展,我们构建了一个原型GL着色来开发云系统和照明模型。
|
||
|
||
8、这让我们看到了地平线的云系统。为了更好地解释,我把它分成了四个部分:建模、照明、渲染和优化。在了解我们对云的建模之前,我们应该对云是什么以及它们如何演变成不同的形状有一个基本的了解。
|
||
|
||
9、There are many examples of real-time volume clouds on the internet. The usual approach involves drawing them in a height zone above the camera using something called fBm, Fractal Brownian Motion. This is done by layering Perlinnoises of different frequencies until you get something detailed.
|
||
|
||
•This noise is then usually combined somehow with a gradient to define a change in cloud density over height.
|
||
|
||
10、由于光噪声本身不能切割,我们开发了自己的分层噪音。
|
||
|
||

|
||
|
||
Worley噪音是由Steven Worley在1996年引入的,经常用于因果关系和水的影响。如果它是倒立的,就像你在这里看到的:
|
||
|
||
它的形状非常紧密。
|
||
|
||
我们把它像标准的perlinfbm方法一样分层
|
||
|
||
然后,我们用它来作为对dilate perlin噪声的偏移量。这使我们能够保持perlin噪声的连接,但是增加了一些billowy的形状。
|
||
|
||
我们把这叫做“佩林-沃利”的噪音
|
||
|
||
11、在游戏中,把声音存储为tiling 3d纹理通常是最好的。
|
||
|
||
•你想保持纹理读取到最低…
|
||
|
||
•尽可能小的保持决心。
|
||
|
||
•在我们的例子中我们已经压缩的声音…
|
||
|
||
•两个3 d纹理…
|
||
|
||
•和1 2 d纹理。
|
||
|
||

|
||
|
||
第一个3 d纹理…
|
||
|
||
•4个通道
|
||
|
||
•这是128 ^ 3决议…
|
||
|
||
第一个频道是我刚才描述的perlin- worley噪声。
|
||
|
||
另外3个是在频率增加的Worley噪声。和标准方法一样,这个3d纹理用来定义云的基本形状。
|
||
|
||

|
||
|
||
我们的第二个3 d纹理…
|
||
|
||
•有3个频道…
|
||
|
||
•它是32 ^ 3决议…
|
||
|
||
•使用Worley噪音来增加频率。这个纹理被用来向第一个3d噪音定义的基本云形状添加细节。
|
||
|
||

|
||
|
||
•我们的2 d纹理…
|
||
|
||
•有3个频道…
|
||
|
||
•这是128 ^ 2分辨率…
|
||
|
||
•并使用curl噪音。它不是发散的,是用来假装流体运动的。我们使用这种噪音来扭曲我们的云形状并增加气流的感觉。
|
||
|
||

|
||
|
||
回想一下,标准解决方案要求高度梯度来改变高度的噪音信号。相反,我们使用…
|
||
|
||
•3数学预设,代表了主要的低空…
|
||
|
||
•当我们在样本位置混合时,云的类型。
|
||
|
||
•我们也有一个值,告诉我们希望在样本位置上有多少云覆盖。这是0和1之间的值。
|
||
|
||
|
||
|
||

|
||
|
||
我们在屏幕右边看到的是一个大约30度的视图。我们将会在相机上方的一个区域中按标准方法绘制云。
|
||
|
||
首先,我们建立一个基本的云形状,通过采样我们的第一个3d纹理并将它乘以我们的高度信号。
|
||
|
||
•下一步是将结果乘上覆盖范围,并减少云层底部的密度。
|
||
|
||

|
||
|
||
|
||
|
||
使用2D燥波增加基础云的细节
|
||
|
||

|
||
|
||
•通过在云边缘减去第二个3d纹理来侵蚀基本的云形状。小提示,如果你在云的基础上颠倒了Worley的噪音,你会得到一些很好的声音形状。
|
||
|
||
•我们也扭曲第二旋度由2 d纹理噪声假纠结的扭曲的大气湍流可以看到…
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||

|
||
|
||
在这个图像中你可以看到一个小地图在左下角。这代表了在我们的世界地图上驱动云层的天气设置。您所看到的粉红色白色图案是来自我们的天气系统的输出。红色是覆盖层,绿色是降水,蓝色是云类型。天气系统通过模拟在游戏中进行的模拟来调节这些通道。这里的图像有积雨云直接在头顶(白色)和普通积云在远处。我们有控制偏见的方法来保持事物在一般意义上是直接的。
|
||
|
||
|
||
|
||
其实就是通过贴图来控制雨云的分布
|
||
|
||
|
||
|
||
|
||
|
||

|
||
|
||
我们还利用我们的天气系统来确保云是地平线,这是很有趣的。
|
||
|
||
•我们画的cloudscape withina球员…周围半径35000米。
|
||
|
||
•和从15000米的距离…
|
||
|
||
•我们开始向积云过渡到50%的覆盖率。
|
||
|
||
|
||
|
||
总结
|
||
|
||
所以总结我们的建模方法…
|
||
|
||
我们遵循标准的ray - march / sampler框架
|
||
|
||
但是我们用两个层次的细节来构建云
|
||
|
||
低频率的云基形状
|
||
|
||
高频细节和失真
|
||
|
||
我们的噪音是由Perlin、Worley和Curl杂音制成的
|
||
|
||
我们为每个云类型使用一组预先设置来控制在高度和云覆盖上的密度
|
||
|
||
这些都是由我们的天气模拟或定制纹理来驱动的,用于使用剪切场景
|
||
|
||
它在给定的风向中都是动态的。
|
||
|
||
|
||
|
||
|
||
|
||
云的定向散射或发光质量…
|
||
|
||
•银衬里当你看向太阳通过云…
|
||
|
||
当你从太阳中移开时,云上的暗边可以看到。
|
||
|
||
前两个有标准的解决方案,但第三个是我们必须解决的问题。
|
||
|
||
|
||
|
||
在光线进入云再到结束,要么被吸收、要么色散
|
||
|
||
|
||
|
||
|
||
|
||

|
||
|
||
Beer's law说,我们可以根据所经过的介质的光学厚度来确定光的到达点。根据比尔斯定律,我们有一种基本的方法来描述云中的特定点的光量。
|
||
|
||
•如果我们用能量来替代云中的透光率,并把它画出来,你就可以看到能量指数的下降。这是我们照明模型的基础。
|
||
|
||
|
||
|
||

|
||
|
||
在云层中,有更高的光散射的可能性。这被称为各向异性散射。
|
||
|
||
在1941年,henyey - greenstein模型被开发用来帮助天文学家在星系尺度上进行光计算,但今天它被用于在云照明中可靠地复制各向异性。
|
||
|
||

|
||
|
||
每次我们采样光能量时,我们用henyey - greenstein相函数乘以它。
|
||
|
||

|
||
|
||
在这里你可以看到结果。左边的只是我们照明模型的Beer‘s law部分。在右边,我们应用了henyey - greenstein相函数。请注意,在右边的太阳周围的云层更明亮。
|
||
|
||
|
||
|
||

|
||
|
||
当我们在云上越走越深时,我们在散射上的潜力就会增加,更多的信息将会到达我们的眼睛。
|
||
|
||
•如果你把这两个函数得到描述这样的东西…
|
||
|
||
•效应以及传统方法。
|
||
|
||
我还在ACM数字图书馆寻找啤酒粉的近似方法,但我还没有发现任何与这个名字有关的东西。
|
||
|
||
|
||
|
||
将Power公式与Beer's law相结合,得到了Beer's power
|
||
|
||
|
||
|
||

|
||
|
||
|
||
|
||

|
||
|
||
但我们必须记住,这是一个依赖于视图的效果。我们只看到,我们的视图矢量接近光矢量,所以Power函数也应该解释这个梯度。
|
||
|
||

|
||
|
||
|
||
|
||

|
||
|
||
So, in review our model has 3 components:
|
||
|
||
•Beer’s Law
|
||
|
||
•Henyen-Greenstein
|
||
|
||
•our powder sugar effect
|
||
|
||
•And Absorption increasing for rain clouds
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||

|
||
|
||
|
||
|
||

|
||
|
||
低海拔1500~4000用体素云。超过4000就用2D ray march云
|
||
|
||
|
||
|
||

|
||
|
||
|
||
|
||

|
||
|
||
回想一下,采样器有一种低细节的噪声,它能形成基本的云形状
|
||
|
||
•高细节的噪音,增加我们所需要的现实细节。
|
||
|
||
高细节的噪声总是应用于从基云形状边缘的侵蚀。
|
||
|
||
|
||
|
||

|
||
|
||
这意味着我们只需要做高细节的噪声和所有相关的指令,其中低细节的样本返回一个非零的结果。
|
||
|
||
•这就产生了在我们的云所处的区域周围产生一个等表面的效应。
|
||
|
||
|
||
|
||

|
||
|
||
因为射线长度增加我们看向地平线,我们开始…
|
||
|
||
•一个初始potential64样本和结束…
|
||
|
||
•潜在的128位。我之所以说潜力,是因为这些优化可能导致3月份提前退出。我们真的希望他们能做到。
|
||
|
||
这就是我们如何利用样本来建立我们图像的alpha通道。为了计算光强度,我们需要取更多的样品。
|
||
|
||

|
||
|
||
|
||
|
||
|
||
|
||

|
||
|
||
In our approach, we sample 6 times in a cone toward the sun. This smooth's the banding we would normally get with 6 simples and weights our lighting function with neighboring density values, which creates a nice ambient effect. The last sample is placed far away from the rest …
|
||
|
||
•in order to capture shadows cast by distant clouds.
|
||
|
||
|
||
|
||
自阴影算法………… |