SilverLining Sky、3D Clouds 和 Weather SDK 6.38 版本现在包含开源 Diligent Engine 的集成示例! 我们很高兴能够为这个快速增长的跨平台引擎提供支持。
在 SDK 的示例应用程序中,您现在可以找到来自 Diligent 的修改后的“立方体”教程项目,该项目演示了将 SilverLining 的物理精确天空和 3D 体积云集成到 Diligent 的 OpenGL、DirectX 11 和 Vulkan 模式中(我们目前不支持 DirectX 12) ,尽管可以为此使用“Direct3D 11 on 12”功能。)
上面的屏幕截图显示了 SilverLining 的云集成到 Diligent 附带的更复杂的 Atmosphere 演示中。
研究示例将是开始将 SilverLining 与您自己的基于 Diligent 的应用程序集成的最简单方法,但在此过程中需要注意一些重要注意事项:
- 如果您使用 Vulkan,请务必在管道状态对象上启用剪切,并在每帧使用 IDeviceContext::SetScissorRects 设置剪切矩形。 SilverLining 还要求您在通过 SilverLining::ThreadCameraStreamData::SetStream() 方法绘制天空或云彩之前传入当前的 VkCommandBuffer; 这可以从 IDeviceContext 中获取,如示例的 DrawSilverLining 方法中所示。 SetStream()的第二个参数表示当前交换链图像的索引; 我们找不到从 Diligent 检索此值的好方法,但在大多数情况下,只需传递 0 即可,因为 Diligent 通常似乎会执行简单的双缓冲。
- SilverLining 的初始化将根据所使用的渲染器而有所不同。 有关如何获取每种情况所需的各种参数的详细信息,请参阅示例的 InitializeSilverLining 方法。
- 另一个特定于 Vulkan 的问题是您必须使用要关联的 VkRenderPass 来初始化 SilverLining。 这意味着您希望将天空和云集成到其中的管道状态对象必须先创建,然后才能实例化 SilverLining。 如果 PSO 的创建被推迟到稍后(如 Atmosphere 演示中所示),那么 SilverLining 的设置也必须被推迟。 如果您的 PSO 发生变化,您还需要创建一个与其关联的新 SilverLining::Atmosphere。
- SilverLining 是一个低级渲染库,管理自己的绘图; 因此,Diligent 无法直接了解它可能修改的任何渲染状态。 如果您在 SilverLining 之后绘制任何内容,则可能需要使用 IDeviceContext::InvalidateState() 并在进行自己的绘制之前重新设置您自己的任何所需状态。
- 不要忘记修改示例中的 SILVERLINING_RESOURCE_PATH 定义以指向安装 SilverLining 的 Resources 目录的位置。 如果您只是评估 SilverLining,则可以保留许可证信息不变。
- 您会发现将 SilverLining 的模型视图和投影矩阵与您的应用程序同步非常简单。 请参阅示例中的 SyncSilverLiningMatrices 方法。
SilverLining 提供的内容远不止此示例中所示的内容,但这提供了一个很好的起点。 您可以检索给定时间和地点的模拟照明条件,启用降水效果,模拟任何条件的天空,并从各种云类型中进行选择。 如果您是 SilverLining 的新手,请务必查看 SilverLining 文档以了解其功能的深度。