Simul trueSKY – 实时渲染真实的天空
trueSKY是一款软件开发工具包,可以在各种平台上实时渲染真实的天空,云彩和大气效果。
TrueSKY是多年研发的结果。它基于光散射和吸收的物理原理,并对速度进行了高度优化。我们相信这是表现真实的实时天空和云彩最好的系统。
SDK是在主“Simul”目录下的一组库。这些可以静态或动态链接,具体取决于平台。 在静态库中,二进制文件在“Simul / lib”目录下;若是dll,则在“Simul / exe”中。 源文件可在组成库的子目录中找到。
在 exe 和 lib,有以下结构:
Win32
VC11
调试
发布
静态调试
静态发布
v140
...
x64
...
{控制台平台}
...
已编译的Windows库有两个运行时版本,_MD和_MT。 运行时是Microsoft提供的一组库,提供基本的系统功能。您通常应该通过一个项目一直使用相同的运行时,尽管不同的运行时可以用于DLL,因为它们是独立的。
对于Windows,调试和发布配置是作为DLL链接到动态MD运行时提供的。 静态调试和静态释放配置是作为与静态MT运行时间链接的静态库提供的。
Unity
要使用trueSKY Unity插件,请将相应的trueSkyUnityPlugin.unitypackage安装到Unity项目中。
Unreal Engine 4
trueSKY虚幻引擎4插件作为GitHub上的UE4引擎的一个分支,也作为UE4二进制分发的单独安装程序。
trueSKY SDK
trueSKY SDK可以通过两种不同的方式与游戏/模拟集成。首先,我们可以像使用Unity和Unreal一样动态链接到trueSkyPluginRender库和API。 第二种选择是直接链接trueSKY库,并直接访问低级类别。
所有Simul的默认渲染器都使用右手坐标系统,x指向东,y指北和z向上。所有单位的距离是米或公里。如果未指定为公里,则距离以米为单位。角度单位是弧度,除非指定为度数。 温度以开尔文为单位,除非指定为摄氏度。
天气处理这样完成 ::clouds::BaseWeatherRenderer BaseWeatherRenderer\endlink。
Weather Renderer拥有并管理天空,云彩,大气和其他效果的渲染器。 所以Weather Renderer是你的程序和trueSKY之间的主要接口。
以下描述渲染器中实现的天空元素:
特征元素
宇宙背景
星辰
行星
体积云
二维云
混合分辨率渲染
大气
体积光
降水
雨条纹
宇宙背景
首先绘制宇宙背景贴图,其方向与银河系的平面相对应-即
::sky::SkyKeyframer::SetBackgroundBrightness BackgroundBrightness\endlink。
它使用一个plate-carree投影,与银河地平线对齐。给定矢量“视角”,这是银河系坐标的方向,计算是:
float az =atan2(view.y,-view.x);
vec2 texcoord =vec2((ang/(pi*2.0)),0.5-asin(view.z)/pi);
即x坐标与方位角成比例,并且y坐标与仰角成比例。
由于投影的简并性,您可能会在图像的顶部和底部看到一些拉伸,所以最好让贴图在顶部和底部边缘渐变为黑色。
星辰
星星被画成点状精灵,沿着与太阳相同的方向绕着地球的旋转轴旋转。星星通常被拖到最高分辨率的缓冲区(即帧缓冲区或最终缓冲区)。如
::sky::SkyKeyframer::SetStarBrightness StarBrightness ::sky::SkyKeyframer::SetMaxStarMagnitude MaxStarMagnitude\endlink。
太阳
太阳画在星星之后。
行星
行星(例如月亮)由BaseSkyRenderer绘制。需要提供行星贴图位置图,着色器将太阳方向作为参数 - 用于点亮行星(例如月亮的相位)。像恒星一样,行星通常被绘制到最高分辨率的缓冲区,以确保它们具有清晰的轮廓。
天空、大气效果
天空和大气被绘制成一个体积贴图,其中x和y轴是屏幕坐标,z轴是距离。最后的合成步骤将天空,大气和云带到当前的rendertarget。
云彩
云通常被绘制到一对较低分辨率的缓冲区。 :: clouds :: BaseCloudRenderer BaseCloudRenderer绘制的云卷贴图是最新的,并以卷为单位绘制云。
性能
渲染性能主要取决于绘制像素的数量以及光线投影步骤(或云切片)的数量。 计算性能(主要是云闪)在很大程度上取决于网格大小 - 网格越大,点亮云关键帧点的时间就越多。
降低天空渲染的云彩部分很平常,通过以下控制:
::clouds::CloudRenderingOptions::MaximumCubemapResolution MaximumCubemapResolution the ::clouds::CloudRenderingOptions CloudRenderingOptions\endlink。
雨和雪
::clouds::CloudKeyframe::precipitation precipitation用于控制一定时间内的降雨量或降雪量,而::clouds::CloudKeyframer PrecipitationThresholdKm用于设置降雨所需的云的厚度(将其设置为0允许即使最小的云产生雨)。在雪和雨之间切换使用::clouds::CloudKeyframe rain_to_snow\endlink (0是雨,1是雪)。
每个云关键帧都有一个::clouds::PrecipitationRegion PrecipitationRegion\endlink, 它定义了降水的局部区域,如果它不是关键帧的全球范围。用于降水的颗粒的数量可以通过::clouds::BasePrecipitationRenderer MaxParticles来改变。
由 simul::clouds::BasePrecipitationRenderer生成的类别是用来画雨或雪的颗粒的,而 ::clouds::PrecipitationRegion是云渲染器绘制的雨纹效果。这一类别有一个属性 “UseSimulationTime”, 这决定了雨雪速度是基于模拟的天的时间,或者是以秒为单位的实时。
着色器
着色器在平台目录的着色器子目录中作为源文件提供。
Plugin Rendering Interface
将trueSKY连接到游戏或模拟引擎的一种方法是使用Plugin Rendering Interface。动态链接库或称为PluginRenderInterface.dll(或类似)的DLL从游戏引擎中动态加载。导出的函数用于为每个视图执行每帧的天空渲染。
Sky Sequencer
Sky Sequencer是艺术家,技术人员,关卡设计师和任务计划人员的工具。它还可以帮助程序员了解True Sky的天空,云彩和时间系统的运作情况。
要启动Sky Sequencer,请转到Start Menu/All Programs/Simul/Sky Sequencer/Sky Sequencer。