使用AppProjection插件进行投影
AppProjection允许您创建多投影仪设置。支持边缘融合,非线性图像映射以及每个投影的颜色校正。因此,如有必要,AppProjection可以将图像投影到覆盖360度的大型曲面屏幕显示器上。此外,可以完全自定义每个投影以使用所需的视锥。
也可以看看#
启动AppProjection#
要启动应用程序并渲染投影:
-
指定引擎插件库(lib/AppProjection_*)以及所需的其余部分启动参数(例如渲染API,窗口大小等)。例如:
main_x64.exe -extern_plugin AppProjection
您可以使用该库的64位调试或发行版本。 (引擎会根据指定的主应用程序自动加载相应版本的库。)
不能将AppProjection用于:
- 多显示器应用(AppWall, AppSurround)
- 全景渲染模式
- Stereo 3D模式
-
要更改连续显示的数量,请指定-width CLI选项。例如:
main_x64.exe -extern_plugin AppProjection -width 2
默认情况下,最多支持从一个渲染节点输出8个投影。
设置投影#
要设置投影,请按Esc打开系统菜单,转到Plugins选项卡,然后单击Projection按钮。
Projection Configurator窗口将打开。该窗口可以:
您应该先选择一个投影在右上角进行调整。
翘曲#
Warp选项卡允许您为投影设置几何校正。需要进行几何校正的区域包括:
- 先进的离轴校正,其中投影机的放置很麻烦,并且需要对投影机的梯形校正功能进行高级映射
- 非平面屏幕,例如弯曲屏幕和半球形圆顶
- 将一台投影机上的一幅图像投影到一个以上的表面上
- 异常的投影应用程序到定制设计的屏幕上
通过修改显示的网格来执行变形。提供以下选项:
Projection | 在下拉列表中选择一个投影以设置其参数。您也可以使用Page Up和Page Down按钮在投影之间切换。 |
---|---|
Multiplier | 使用箭头键移动点时要使用的位移步长(以像素为单位)。使用+增加值,或使用-减少值。 |
Resolution |
沿网格水平轴和垂直轴的控制点数。默认情况下使用2 x 2网格。 最大网格大小为32 x 32。 |
Points |
可视编辑器使您可以使用控制点和黄色手柄为选定的投影设置变形。这些句柄针对每个选定的控制点显示,具体取决于其类型。 您可以通过单击鼠标来选择控制点,也可以使用箭头键在控制点之间进行切换。 使用鼠标进行的多重选择是对多个对象的共同选择。要在选定组中添加或删除点,请按住Ctrl键单击它们。可以使用箭头键并按下Shift键以链状方式使用键盘进行多选。 Ctrl + Z / Ctrl + Y组合用于Undo / Redo操作。 Shift + Ctrl + Z取消所有转换。 无论图像的方向如何(无论是否翻转),点总是在屏幕空间坐标中移动,这意味着如果按向左箭头,则该点总是向左移动。
网格本身也可以在视图空间内移动:
|
Canvas |
为选定的投影配置画布:设置旋转角度并启用垂直和水平翻转。 |
色彩和亮度校正#
Color选项卡允许您校正色彩强度,以及调整所选投影的色彩平衡。
Brightness |
每通道色彩乘法器可控制以下强度:
红色通道的亮度= 2
|
---|---|
Contrast |
允许您调整每个通道(以及一次所有通道)的色彩平衡的设置:
红色通道的对比度= -0.1
|
Brightness (corners) | 用于分别调整每个投影角的亮度补偿的设置。 |
调和#
Blend选项卡允许您在选定区域和沿边缘配置混合。
Screen-Space Blending |
管理选定区域中的混合。屏幕空间混合区域不受扭曲的影响。 要选择该区域,请单击Add以开始创建混合区域,然后在网格中单击以定义该区域的一侧,然后单击以定义另一侧-将会出现绿线。第三次单击显示混合方向。 屏幕空间混合区域的区域分为两部分:蓝线和绿线之间的部分是纯黑色区域,绿线和红线之间的部分是渐变区域。 默认情况下,这些线中的每条线都有两个标记线限制的点。使用解析度,您可以增加每条线上的点数以通过移动点来根据需要进行调整。可以选择多个点。 使用以下设置调整每个混合区域:
|
---|
掩蔽#
Mask选项卡允许使用遮罩切出所选投影的某些区域。
要创建遮罩,请单击Add并确保已启用Creation Mode按钮。然后通过单击所需的位置在网格上至少创建三个点。投影的相应区域将被切除。当前投影的蒙版列表显示在网格下方。您可以使用相应的按钮添加新的蒙版并删除现有的蒙版。
要将新点添加到列表中选定的蒙版,请确保启用Creation Mode按钮。然后,您可以通过在网格区域内单击来添加新点。要将新点插入现有遮罩中,请选择要在其旁边添加新点的点,然后单击以插入新点。您可以拖动现有点以将其移动。要删除点,请右键单击它。
您还可以通过指定每个点的坐标来精确调整蒙版。在网格上选择一个点(其颜色将变为绿色),然后在下面的Position字段中输入坐标。
您可以使用以下图标更改所选控制点的类型:
- —自动线性插值(无控制手柄)
- —平滑曲线的对称控制手柄
- -非对称控制手柄(您可以独立控制每个手柄)
- -自动平滑曲线(无控制手柄)
在列表中选择一个遮罩时,其参数将显示在其旁边的面板上:
使成为#
Render设置块位于Projection Configurator窗口的底部。这些设置旨在通过在实际投影上显示辅助元素来简化投影的微调。
- Debug Color选项允许您为不同的投影临时设置单独的颜色。这有助于可视化重叠区域。
- Show Grid —在投影上显示网格。
- Warp Points —显示从一个或多个选定点到每侧中心的点和辅助红线。
- Blend Lines —显示屏幕空间混合线和辅助紫色线,其从一个或多个选定点延伸到每侧中心。
多个投影的观看设置#
如果使用AppProjection创建了两个以上的投影,则可以在System menu -> Plugins中调整以下查看设置。
FOV |
所有投影的视场(在这种情况下,相机的Field of View选项不适用)。
FOV = 60
FOV = 80
|
---|---|
Angle |
允许调整投影之间的视角:将投影表面彼此旋转一定角度时,可以将该角度输入为Angle值,并自动重新计算投影以显示正确的图像。 例如,如果两个曲面彼此旋转40度:
角度= 40度
|
Bezel X | 补偿显示器的水平边框。正值会减小视口空间;正值会减小视口空间。负数会增加它(用于重叠)。 |
Bezel Y | 补偿显示器的垂直边框。正值会减小视口空间;正值会减小视口空间。负数会增加它(用于重叠)。 |
保存和加载预设#
设置投影配置后,可以将其保存到预设文件(*.proj)中以随时加载(例如,设置另一个投影):
- Save按钮保存预设文件
- Load按钮加载预设文件
- 您保存的*.proj文件仅包含当前所选投影的设置。
- 从*.proj文件加载的设置将应用于当前选择的投影。
自定义AppProjection#
可以自定义AppProjection以支持每个投影的自定义视锥(对称或非对称视锥)。
AppProjection视口#
AppProjection具有一个主视口,而所有其他视口则呈现为辅助视口。默认情况下,主显示是用于单显示器配置的UNIGINE引擎视口。它使用引擎使用的Player矩阵查看场景。其他显示器是具有任意角度并面向所需方向的任意摄像机。每个显示器都有自己的模型视图和投影矩阵。如果需要,可以启用或禁用主投影和辅助投影。
- 可以将主视口设置为任何投影(对于支持的配置,它已经被设置)。
- 每个视口都有自己的模型视图和投影矩阵。
- 默认情况下,只有主要的一个具有图形用户界面(渲染系统GUI,编辑器小部件,线框或事件探查器)。但是,可以在所有投影上绘制单独的GUI。
- 所有视口都有自己的视口反射遮罩可选择性地渲染节点和来自节点的反射。
默认配置#
对于默认配置,主视口设置为以下投影:
- 对于2个投影,第一个视口。
- 对于3个投影,第二个视口。
- 对于4个投影,第二个视口。
- 对于5个投影,第三个视口。
如何自定义投影#
AppProjection视口的渲染由wall.h脚本(位于<UnigineSDK>/data/core/scripts/system/文件夹中)控制。有两种可能的设置,具体取决于渲染主投影的方式。可以通过以下方式得出:
- 默认引擎渲染器(与呈现通常的单显示器应用程序时相同)
- AppProjection渲染器本身(如果要对中心投影使用不对称的视锥,并修改其模型视图矩阵,则更加安全)
以下示例演示了如何调整相机配置并为主投影选择渲染器。
1.使用默认引擎渲染器#
第一种变体是通过默认引擎渲染器渲染主(主)投影。
-
如果尚不支持创建的配置,请通过Unigine::Plugins::AppProjection::setPrimary()设置主投影:
// Set the first projection as a primary one Unigine::Plugins::AppProjection::get()->setPrimary(1);
-
通过Unigine::Plugins::AppProjection::SetEnabled()启用所有非主要投影。主菜单应保留为禁用状态,因为它是由默认引擎渲染器绘制的。
// Enable the 2nd projection in a row // The second argument of the function sets 'enabled' flag Unigine::Plugins::AppProjection::get()->setEnabled(1, 1);
-
通过Unigine::Plugins::AppProjection::SetProjection()和Unigine::Plugins::AppProjection::SetModelview()设置辅助投影的投影和模型视图矩阵。
// Settings for the 2nd projection Unigine::Plugins::AppProjection::get()->setProjection(1, projection_1); Unigine::Plugins::AppProjection::get()->setModelview(1, projection_1);
2.使用AppProjection渲染器#
另一个变体是通过AppProjection渲染器渲染主投影。例如,如果要为所有投影设置对称的平截头体,则可以使用此变体。
-
设置要用作主要投影的投影,并通过AppProjection启用其渲染。
// Set the first projection as a primary one Unigine::Plugins::AppProjection::get()->setPrimary(1);
-
通过Unigine::Render::setEnabled()禁用渲染到默认的UNIGINE视口:
Unigine::Render::setEnabled(0);
-
启用所有AppProjection投影,包括主要的。结果,所有视口将由AppProjection渲染器本身渲染:
// Enable all projections Unigine::Plugins::AppProjection::get()->setEnabled(0, 1); Unigine::Plugins::AppProjection::get()->setEnabled(1, 1);
-
为所有投影设置模型视图和投影矩阵。
// Settings for the 1st projection Unigine::Plugins::AppProjection::get()->setProjection(0, projection_0); Unigine::Plugins::AppProjection::get()->setModelview(0, modelview_0); // Settings for the 2nd projection Unigine::Plugins::AppProjection::get()->setProjection(1, projection_1); Unigine::Plugins::AppProjection::get()->setModelview(1, modelview_1);