我们为Triton Oceans for Unitys收到的技术支持问题中约有90%能在我们的文档中得到解答-但并非每个人都知道在哪里可以找到它。 我们把它复制到这里,以便Google至少能够找到它!
感谢您试Triton Oceans for Unity! Triton将基于GPGPU的波浪模拟带到Unity,可在任何给定的风况下快速,逼真的模拟波浪。 除了3D表面位移,折射,海岸,浮力和反射效果外,Triton还根据海洋的剧烈程度产生泡沫和粒子喷雾效果。 Triton还通过3D波浪位移和螺旋桨反冲洗效果以及旋翼冲洗和冲击效果渲染船舶尾流。 Triton还允许将贴花纹理应用于流动的水表面。 Triton使用“ Pierson-Moskowitz”波谱,使其对于海事训练目的足够逼真,并能够表示1-9的蒲福风级条件。
在尝试单机构建你的项目之前,请务必阅读下面的 "用Triton分类你的应用程序"部分。
每次运行五分钟后,该试用版将终止您的应用程序,并显示警告对话框,指出Triton在启动时未获得许可。 要取消这些试用限制,可通过Unity Asset Store和我们的网站http://www.sundog-soft.com.cn获得许可证。
要更改水位,只需调整TritonPrefab位置的Y分量。
您可以调整Triton Unity脚本组件中的几个属性:
风速:模拟的风速,以米/秒为单位。 风越多,波浪越大,水沫越多。
风向:风向,以度为单位。
水沫:切换基于粒子的水沫效果。
资源路径:来自项目或可执行文件的相对路径,可以在其中找到TritonResources文件夹。 Triton没有它不能运行。
用户名/许可证密钥:如果您是从http://www.sundog-soft.com/购买的Triton许可证,请在此处输入您收到的用户名和许可证密钥以停止弹出提醒您进行注册以及五个 分钟运行时间限制的对话框。
游戏摄像机:将与水关联的摄像机对象拖到此处; Triton将使用它来获取渲染水时使用的投影和模型视图矩阵。
定向光源:将定向光源对象拖到此处,这将影响水的颜色和光源的镜面高光。 确保正确设置了“渲染设置”中的环境光,因为这也将用来照亮水。
启用平面反射。切换水中局部物体的平面反射,如地形、船只等。平面反光在浅水条件下看起来很不错,但在公海中,反光就很难看清了,而且可能不值得为产生反光而需要第二台相机的性能开销。您可以将平面反射与环境图一起使用,也可以单独使用其中一种反射。
水上能见度:水上能见度,以米为单位。 这可用于将远处的水雾化,使其融入天空。 请注意,这只会使水雾化,而不会影响场景的其余部分。 仅在“使用渲染设置雾”为false时使用。
水的色彩:场景中水的底色。 请注意,如果您调整此颜色,则最有可能要调整“水上雾色”和“水下雾色”以匹配您选择的新颜色。
水上雾色:如果将“使用渲染设置雾”设置为false,则水将融合接近水上可见性距离时的颜色。 如果您的场景具有动态的一天中的时间效果,请确保更新雾色以使其在夜晚变黑白天变亮。
使用“渲染设置”雾:如果设置为true,则每帧都会从“渲染设置”雾值中复制水上的雾色和密度。
水下能见度:水下能见度,以米为单位。 如果启用了海岸效应,除了使水表面起雾之外,这还将影响海岸线附近水的透明度。 请注意,这只会使水雾化,而不会影响场景的其余部分。
水下雾色:当接近水面可视距离时,水面的颜色会向着水面的颜色混合。
深度:模拟的水深,以米为单位。 在浅处,使水具有一定的透明度,以使下面的地面得以显示。 深度也会影响波浪的形状。 如果启用了沿海效果,则将使用场景自动生成的高度图来确定深度和透明度,并且将忽略此设置。
波浪起伏:海浪的尖锐幅度。 振幅为0时会产生圆形波,振幅为2.0时会产生急剧尖峰。
使用“渲染设置”雾:如果设置,将使用“渲染设置”中指定的雾色和密度,而不是“水上能见度”和“水上雾色”中指定的值。 这对于在场景的其余部分始终使水雾化非常有用。
世界单位:场景中每个单位代表多少米。 这只能在设计时更改,而不能在运行时更改。
水下雾效果:如果启用,则将“渲染设置”雾为与照相机在水下时匹配水面时的雾相同,并且任何天空框都将被雾色替换为背景。 相机回到水面之上后,原始的雾气和天空盒设置将被保存并恢复。
地心坐标:只有在您使用WGS84椭球体地球模型的地心坐标系,且原点在地球中心的情况下,才会启用此功能。
Y是向上:如果您使用默认的Unity惯例,即 "向上 "是沿着Y轴,请保留此选项。仅当Z轴向上(或在地心坐标的情况下为北)时才取消勾选。
海岸效果:(仅Windows)选中此选项可使水与海岸线平滑融合。 它通过创建场景的高度图并随着水深的减小而增加水的透明度来起作用。 您的地形将需要延伸到水面以下(“测深数据”),以使其正常工作。 该效果受高度图的分辨率限制,因此在水中陡峭的悬崖或柱子附近可能无法产生良好的效果。
深度偏移:这为海洋上的深度缓冲区提供了一个推力,让你可以解决水面和水面下的倾斜地形之间的斑驳假象。这在没有海岸效果的MacOS上特别有用。合理的数值应该是在0到0.002左右。
高度图区域:为海岸效果生成的高度图所覆盖的区域(以世界单位为单位)。 增大此值将导致沿海岸延伸的融合距离相机更远。 减小它会增加用于相机附近混合的高度数据的分辨率。 如果关闭了海岸效果,则将忽略此值。
破浪振幅:如果海岸效应开启,则海岸线附近的破浪幅度(以世界单位计算)。数值为零则禁用破浪。只有当你的地形包括真实的水深数据时,破浪才能很好地工作。如果你的水深线与海岸线的倾斜度超过几度,波浪就不会脱离海岸--这是现实的行为。
破浪方向:破浪的方向,应指向海岸。除非海岸效应开启,且破浪振幅大于零,否则此值不予考虑。
无头模式:如果您在打算作为没有图形的中央服务器的系统上运行Triton,则可以启用“无头”模式。 这将导致Triton更新其所有波浪,物理学和浮力模型,但不会花费时间实际绘制水面。 如果启用此选项,水将消失-但这就是应该做的!
时间刻度:使用此刻度可以调整Triton的时间感。 例如,将其增加到2.0将使波速和水沫粒子的运动增加一倍。
为了解决这个问题,Triton现在自带一个编辑器脚本,该脚本向Unity的菜单栏添加了一个新的编辑器选项。 在尝试构建自己的单机可执行文件之前,只需选择“ Triton编辑器工具->更新插件导入设置”。 这将通过Triton的每个插件,并使用正确的CPU架构标记其导入设置,而无需您自己这样做。
注意:如果“ Triton编辑器工具”没有出现在菜单栏上,请尝试以下步骤以确保它出现:
进入 "编辑->项目设置->播放器",然后进入 "分辨率和演示 "部分。取消勾选 "D3D11强制独占模式 "选项。然后构建你的应用程序。Unity 4.6在使用该选项时,应用程序会以全屏模式构建和运行,这与应用程序开始时出现的许可警告对话框相冲突。取消勾选该选项将强制在窗口模式下构建,这样就可以与对话框进行交互。这一步必须在每次构建前完成。
同样,这不适用于Triton编辑器工具的构建过程,因此,如果使用这些工具构建单机版本,则可以忽略此预防措施。
在我们的演示场景中,你会发现一个 "浮力示例 "对象,它只是一个按比例缩放的立方体--但它对船舶和其他对象同样适用。它使用了Alex Zhdankin的公有领域的Buoyancy.cs脚本,稍作修改后,可以从Triton中获取水的高度值。我们还为它添加了一个 "海平面偏移 "参数,它可以用来补偿那些不以浮力中心为中心的模型。
为了使这个脚本正常工作,你需要一个碰撞器和一个连接到你的浮力对象的RigidBody以及Buoyancy.cs脚本上。对于真实的模型,而不是像我们的例子中那样只是一个简单的几何对象,你需要使用一个具有正确网格对象的网格碰撞器。重要的是,你要在Rigidbody中指定一个真实的质量,并在浮力脚本中指定一个真实的密度。如果质量太小,物体就不会对重力做出正确的反应--如果密度太小,物体在水中的弹力就会太大。
您还需要确保“浮力”脚本中的“每轴切片”和“体素限制”设置足够高,可以代表模型的复杂性。 这些设置会影响在对象上模拟多少个控制点。 太少会导致不切实际的运动。 您可以通过启用Gizmos可视化来自这些点的力。
至少,您需要输入Triton Wake Generator脚本的“长度”和"波束宽度"属性。 长度是船或物体的长度,波束宽度是船或物体背面的宽度,以米为单位。
螺旋桨反冲效果也可以通过 "螺旋桨冲刷 "和 "螺旋桨冲刷偏移 "属性进行切换,并对其原点位置进行调整。"LOD距离 "设置螺旋桨效果将其中的段数减半的距离,让你从远处一次看到更多的波浪。
"船头偏移 "可用于在产生尾气的物体前方产生水沫粒子。一般来说,这将是物体位置到物体前方的距离,以在船头产生水沫。在速度较高的情况下,船头的尾波也会在此位置被推起。其效果可以通过 "船首波浪规模 "参数进行缩放,并以 "船首波浪最大值 "为上限。艏尾会受到 "吃水 "(指船体在水面下延伸的距离)以及“船头大小”(对于大多数带有尖头弓的船舶而言,该大小应为零)的影响。
如果 "自动更新 "开启,速度将根据对象的运动自动计算。如果它是关闭的,你将需要自行更新“速度”属性。速度会影响尾波的高度和其上的泡沫量。
最后,"测试运动"复选框将使对象围绕摄像机位置旋转。当你还没有装备好对象的运动时,这对查看尾波效果很方便。
public UnityEngine.Vector3 ClosestPointOnBounds(UnityEngine.Vector3 position)
public bool Raycast (Ray ray, out RaycastHit hitInfo, float distance)
这些方法与Unity自己的Collider接口的方法签名相同。它们将返回准确的碰撞点和海洋表面的法线,并考虑到所有的波浪和尾波。Triton不包括用于定位你的船的浮力模型,但这些方法会给你提供你需要的数据来驱动一个模型。
另外,我们公开:
公用浮点仪GetHeight(float x, float z)
假设负Y为“下”,则在给定的x,z位置检索波高。
设置风速(以米/秒为单位),转子指向的方向(通常是向下或0,-1,0),转子的直径(以米为单位),Triton将完成其余的工作。
软件包随附的测试场景包括一个最初禁用的Sphere-RotorWash对象,该对象说明了用法。
请注意,在Unity将编辑器升级到64位(Unity 5)之前,启用转子冲刷功能可能会导致编辑器锁定,因为没有足够的内存来存储所有内容。 如果遇到此问题,请尝试在编辑器外部运行项目,这将消除此问题。
软件包随附的测试场景包括一个最初禁用的Sphere-Impact对象,该对象说明了用法。
基本上,创建一个游戏对象并将TritonDecal脚本附加到该对象。 为脚本属性分配纹理和贴花大小,然后将游戏对象的位置设置为想要贴花的位置。 请注意,您指定的Y位置在海平面上很重要。
在运行时,您可以调整贴纸纹理的不透明度,并调整贴纸的游戏对象的比例,而不会影响性能。您可以使用这个功能,通过随时间调整贴纸的不透明度和大小,为贴纸提供简单的动画。
改变基础尺寸、纹理或位置将导致基础贴纸被重新创建。
为了使贴花与移动的水面相吻合,贴花采用了延迟体积渲染技术。
解决此限制的方法是为透明对象创建单独的相机。 如果将透明对象分配给“透明FX”层,则可以使用剔除蒙版和摄影机深度顺序将透明对象挡在Triton绘制的主摄影机之外,并保留在Triton之后绘制的另一个摄影机中。 您需要通过使用相同的相机控制器来确保“透明相机”与主相机的方向保持同步,并且该透明相机不会清除颜色或深度缓冲区。
从Unity 5.1开始,具有延迟阴影的相机不再使用“请勿清除”标志。 这意味着要使用第二台照相机来获得透明效果。 如果将主摄像头设置为延迟,则必须将透明摄像头设置为旧延迟,以使其正常工作。 另一种选择是将两个摄像机都设置为前向渲染。
可以在http://media.sundog-soft.com/TritonRTTProblemTrans.zip中找到说明此技术的示例项目。
在Triton Prefab对象中启用“沿海效果”选项,Triton将从场景中自动生成一个高度图,用于确定每个点的水深。 当检测到浅水时,水的透明度将增加,海浪位移将减少,从而导致水/陆过渡平稳,并防止斑驳伪影。
透明度的大小可以通过“水下可见度”设置进行调整。 当照相机在水面之上时,请注意不要将其设置得太高,否则可能会导致水变得不切实际。 值在10-20米之间通常会产生良好的结果。
如果你的海岸包括一个平滑的海底,以几度的坡度下降,尝试将 "破浪振幅 "设置为现实的波浪高度,"破浪方向 "指向海岸。这将导致破浪效果,波浪会随着深度的减少而增长、减慢,最后扩散开来。
如果您有多台摄像机,但一次只有一台处于活动状态,则可以使用TritonUnity.SwitchCamera()在运行时在它们之间切换。
解决方法是,您可以修改Triton的着色器以消除gamma射线校正的影响。 您将需要在文本编辑器中编辑TritonResources / flat-fft-patch.fx和TritonResources / flat-fft.fx文件。
在这些着色器的PS()函数的底部,您将看到以下几行:
#ifndef HDR
finalColor = clamp(finalColor, 0.0f, 1.0f);
#endif
return finalColor;
将此代码替换为:
return float4(pow(finalColor.xyz, 2.2), 1.0);
并且,这应该在线性色彩空间下提供正确的结果。
如果水的方向似乎发生了偏移,则您可能正在使用一种图像效果,该图像效果使Unity在内部将场景上下颠倒渲染,而无需告诉Triton。 但是,有一种解决方法。 在UpdateMatrices方法的TritonUnity.cs文件中,您将看到以下代码块:
if (camera.actualRenderingPath == RenderingPath.DeferredLighting || camera.targetTexture != null)
{
Matrix4x4 pflip = Matrix4x4.Scale (new UnityEngine.Vector3(1.0f, -1.0f, 1.0f));
P = pflip * P;
}
基本上这是在尝试猜测Unity什么时候是上下颠倒渲染,但它忽略了图像效果的情况。只要注释掉if(...行(在if语句前加上一个//)来强制发生翻转,应该就会清楚了。
如果对象与其反射之间存在间隙,请尝试调整TritonReflection.cs顶部的clipPlaneOffset的值。
如果水的颜色看起来不对,请检查以下几项:
如果运行Oculus支持的应用程序会导致运行场景的视觉错觉,请关闭应用程序并重新运行。与Oculus硬件的连接可能没有正确连接。
如果在Unity 5编辑器中运行Triton导致发生涉及使用SetDirectoryDll的错误,则这是一个已知问题,开始在更高的Unity 5 beta版本中出现。 这些不会影响Triton在编辑器中的运行状态,也不会影响Unity 5的单机构建。
如果你有一块NVIDIA视频卡,Triton提供了对CUDA加速的支持。要启用该功能,您必须下载5.5.47或更高版本的CUDA驱动程序。通过系统偏好设置 > 其他 > CUDA 访问最新的驱动程序。点击 "安装CUDA更新"。在Mac OS X 10.9 Mavericks上需要该驱动程序的支持。
运行时,必须将Intel IPP库放置在应用程序中。 TritonUnity.cs中有代码可以自动执行此操作,但是如果您移动Resources文件夹但未选中它,则可能需要手动移动它们。 它们位于Assets> Triton> TritonResources> linux中,并且是此文件夹中的所有* .dylib文件。
在Triton.config中,有一些Mac专用的项目,即default-grid-resolution-mac和spair-force-point-sprites-mac。这些项目已经针对OS X的性能进行了调整,但您可以根据您的应用需求调整它们。请注意,默认设置会导致性能的大幅提升(每项设置约 8 fps)。
生成单机可执行文件时,请确保您复制Assets / Triton / TritonResources并粘贴到已生成的可执行文件旁边,以确保Triton正常运行。
与Windows版本一样,在OS X的Unity 5上使用Triton可能需要您更新包含的Triton脚本。 如果在Triton游戏对象上看到编译警告和缺少Monobehaviour脚本,请参考“故障排除”部分。
OS X上Unity 5的Triton提供了与Windows版Triton相同的更新插件导入设置的编辑器选项。请参考 "使用Triton - Unity 5分类您的应用程序 "部分,了解如何运行该选项的更多细节。在您尝试构建独立的可执行文件之前,请先运行此选项。
感谢您试Triton Oceans for Unity! Triton将基于GPGPU的波浪模拟带到Unity,可在任何给定的风况下快速,逼真的模拟波浪。 除了3D表面位移,折射,海岸,浮力和反射效果外,Triton还根据海洋的剧烈程度产生泡沫和粒子喷雾效果。 Triton还通过3D波浪位移和螺旋桨反冲洗效果以及旋翼冲洗和冲击效果渲染船舶尾流。 Triton还允许将贴花纹理应用于流动的水表面。 Triton使用“ Pierson-Moskowitz”波谱,使其对于海事训练目的足够逼真,并能够表示1-9的蒲福风级条件。
在尝试单机构建你的项目之前,请务必阅读下面的 "用Triton分类你的应用程序"部分。
每次运行五分钟后,该试用版将终止您的应用程序,并显示警告对话框,指出Triton在启动时未获得许可。 要取消这些试用限制,可通过Unity Asset Store和我们的网站http://www.sundog-soft.com.cn获得许可证。
开始
默认情况下,此发行版会将Triton.unitypackage文件安装到“ Program Files / Triton for Unity Trial”中。 开始:- 在Unity中,选择Assets / Import Package / Custom Package…,然后选择已安装的Triton.unitypackage文件。
- 在项目视图中打开Triton文件夹,然后找到TritonPrefab。 将此拖到您的场景中。
调整水面
单击场景中的TritonPrefab,您将看到可以调整的各种属性。要更改水位,只需调整TritonPrefab位置的Y分量。
您可以调整Triton Unity脚本组件中的几个属性:
风速:模拟的风速,以米/秒为单位。 风越多,波浪越大,水沫越多。
风向:风向,以度为单位。
水沫:切换基于粒子的水沫效果。
资源路径:来自项目或可执行文件的相对路径,可以在其中找到TritonResources文件夹。 Triton没有它不能运行。
用户名/许可证密钥:如果您是从http://www.sundog-soft.com/购买的Triton许可证,请在此处输入您收到的用户名和许可证密钥以停止弹出提醒您进行注册以及五个 分钟运行时间限制的对话框。
游戏摄像机:将与水关联的摄像机对象拖到此处; Triton将使用它来获取渲染水时使用的投影和模型视图矩阵。
定向光源:将定向光源对象拖到此处,这将影响水的颜色和光源的镜面高光。 确保正确设置了“渲染设置”中的环境光,因为这也将用来照亮水。
启用平面反射。切换水中局部物体的平面反射,如地形、船只等。平面反光在浅水条件下看起来很不错,但在公海中,反光就很难看清了,而且可能不值得为产生反光而需要第二台相机的性能开销。您可以将平面反射与环境图一起使用,也可以单独使用其中一种反射。
水上能见度:水上能见度,以米为单位。 这可用于将远处的水雾化,使其融入天空。 请注意,这只会使水雾化,而不会影响场景的其余部分。 仅在“使用渲染设置雾”为false时使用。
水的色彩:场景中水的底色。 请注意,如果您调整此颜色,则最有可能要调整“水上雾色”和“水下雾色”以匹配您选择的新颜色。
水上雾色:如果将“使用渲染设置雾”设置为false,则水将融合接近水上可见性距离时的颜色。 如果您的场景具有动态的一天中的时间效果,请确保更新雾色以使其在夜晚变黑白天变亮。
使用“渲染设置”雾:如果设置为true,则每帧都会从“渲染设置”雾值中复制水上的雾色和密度。
水下能见度:水下能见度,以米为单位。 如果启用了海岸效应,除了使水表面起雾之外,这还将影响海岸线附近水的透明度。 请注意,这只会使水雾化,而不会影响场景的其余部分。
水下雾色:当接近水面可视距离时,水面的颜色会向着水面的颜色混合。
深度:模拟的水深,以米为单位。 在浅处,使水具有一定的透明度,以使下面的地面得以显示。 深度也会影响波浪的形状。 如果启用了沿海效果,则将使用场景自动生成的高度图来确定深度和透明度,并且将忽略此设置。
波浪起伏:海浪的尖锐幅度。 振幅为0时会产生圆形波,振幅为2.0时会产生急剧尖峰。
使用“渲染设置”雾:如果设置,将使用“渲染设置”中指定的雾色和密度,而不是“水上能见度”和“水上雾色”中指定的值。 这对于在场景的其余部分始终使水雾化非常有用。
世界单位:场景中每个单位代表多少米。 这只能在设计时更改,而不能在运行时更改。
水下雾效果:如果启用,则将“渲染设置”雾为与照相机在水下时匹配水面时的雾相同,并且任何天空框都将被雾色替换为背景。 相机回到水面之上后,原始的雾气和天空盒设置将被保存并恢复。
地心坐标:只有在您使用WGS84椭球体地球模型的地心坐标系,且原点在地球中心的情况下,才会启用此功能。
Y是向上:如果您使用默认的Unity惯例,即 "向上 "是沿着Y轴,请保留此选项。仅当Z轴向上(或在地心坐标的情况下为北)时才取消勾选。
海岸效果:(仅Windows)选中此选项可使水与海岸线平滑融合。 它通过创建场景的高度图并随着水深的减小而增加水的透明度来起作用。 您的地形将需要延伸到水面以下(“测深数据”),以使其正常工作。 该效果受高度图的分辨率限制,因此在水中陡峭的悬崖或柱子附近可能无法产生良好的效果。
深度偏移:这为海洋上的深度缓冲区提供了一个推力,让你可以解决水面和水面下的倾斜地形之间的斑驳假象。这在没有海岸效果的MacOS上特别有用。合理的数值应该是在0到0.002左右。
高度图区域:为海岸效果生成的高度图所覆盖的区域(以世界单位为单位)。 增大此值将导致沿海岸延伸的融合距离相机更远。 减小它会增加用于相机附近混合的高度数据的分辨率。 如果关闭了海岸效果,则将忽略此值。
破浪振幅:如果海岸效应开启,则海岸线附近的破浪幅度(以世界单位计算)。数值为零则禁用破浪。只有当你的地形包括真实的水深数据时,破浪才能很好地工作。如果你的水深线与海岸线的倾斜度超过几度,波浪就不会脱离海岸--这是现实的行为。
破浪方向:破浪的方向,应指向海岸。除非海岸效应开启,且破浪振幅大于零,否则此值不予考虑。
无头模式:如果您在打算作为没有图形的中央服务器的系统上运行Triton,则可以启用“无头”模式。 这将导致Triton更新其所有波浪,物理学和浮力模型,但不会花费时间实际绘制水面。 如果启用此选项,水将消失-但这就是应该做的!
时间刻度:使用此刻度可以调整Triton的时间感。 例如,将其增加到2.0将使波速和水沫粒子的运动增加一倍。
VR技术支持
Triton现在支持Unity 5.1中可用的本地VR集成。 若要查看集成的工作原理,请在“播放器设置”中启用“支持虚拟现实”选项。 需要特别注意的是,当前的单机版本默认情况下禁用VR,因此必须使用命令行参数–vrmode DEVICETYPE启动应用程序,其中DEVICETYPE是Unity支持的名称之一。使用Triton分类您的应用程序
仅限UNITY 5 Unity为插件实现了新的句柄系统,引入了所谓的插件导入设置。有了这个新功能,插件不再需要像以前的版本那样放在特定的文件夹中,取而代之的是每个插件都有可修改的导入设置,允许你改变插件必须使用的平台和CPU架构。由于这个变化,Triton可能会因为插件的名称而出现插件碰撞的错误。为了解决这个问题,Triton现在自带一个编辑器脚本,该脚本向Unity的菜单栏添加了一个新的编辑器选项。 在尝试构建自己的单机可执行文件之前,只需选择“ Triton编辑器工具->更新插件导入设置”。 这将通过Triton的每个插件,并使用正确的CPU架构标记其导入设置,而无需您自己这样做。
注意:如果“ Triton编辑器工具”没有出现在菜单栏上,请尝试以下步骤以确保它出现:
- 在项目视图中,转到Assets-> Editor,然后右键单击TritonEditorTools.cs。 选择“重新导入”。 如果出现消息告诉您需要升级脚本,请执行此操作。 然后,单击菜单栏以查看其是否已更新。
- 如果上述方法无效,请关闭并重新打开Unity项目。 同样,如果出现一条消息告诉您您需要升级脚本,请这样做。 项目打开后,您应该在菜单栏中看到“ Triton编辑器工具”。
Unity的所有版本
构建单机的可执行文件时,Unity将删除Triton无法识别的许多本地资源,从而阻止Triton正常工作。 您需要确保安装程序:- 在游戏的可执行文件旁边,从Assets / Plugins文件夹安装TritonDLL.dll文件(对于64位目标,请在重命名后从Asset / Plugins / x64安装TritonDLL.dll。)
- 将TritonResources文件夹从Assets/Triton文件夹完整地安装到 "资源路径"属性中指定的相对于可执行文件的路径。
- 从Microsoft安装Visual Studio 2010 SP1运行时间库。
- 从Microsoft安装最新的DirectX运行时间库。
仅限UNITY 4.6
在Unity 4.6中构建单机可执行文件时,如果不使用Triton编辑器工具来构建可执行文件,则在构建过程之前需要采取预防措施。进入 "编辑->项目设置->播放器",然后进入 "分辨率和演示 "部分。取消勾选 "D3D11强制独占模式 "选项。然后构建你的应用程序。Unity 4.6在使用该选项时,应用程序会以全屏模式构建和运行,这与应用程序开始时出现的许可警告对话框相冲突。取消勾选该选项将强制在窗口模式下构建,这样就可以与对话框进行交互。这一步必须在每次构建前完成。
同样,这不适用于Triton编辑器工具的构建过程,因此,如果使用这些工具构建单机版本,则可以忽略此预防措施。
Triton浮力
Triton在TritonUnity.cs中公开了一些脚本方法,用于与水面的交集和高度测试(参见下面的 "碰撞检测")。我们在包中包含了一个使用这些方法来增强一个简单对象的浮力的例子。在我们的演示场景中,你会发现一个 "浮力示例 "对象,它只是一个按比例缩放的立方体--但它对船舶和其他对象同样适用。它使用了Alex Zhdankin的公有领域的Buoyancy.cs脚本,稍作修改后,可以从Triton中获取水的高度值。我们还为它添加了一个 "海平面偏移 "参数,它可以用来补偿那些不以浮力中心为中心的模型。
为了使这个脚本正常工作,你需要一个碰撞器和一个连接到你的浮力对象的RigidBody以及Buoyancy.cs脚本上。对于真实的模型,而不是像我们的例子中那样只是一个简单的几何对象,你需要使用一个具有正确网格对象的网格碰撞器。重要的是,你要在Rigidbody中指定一个真实的质量,并在浮力脚本中指定一个真实的密度。如果质量太小,物体就不会对重力做出正确的反应--如果密度太小,物体在水中的弹力就会太大。
您还需要确保“浮力”脚本中的“每轴切片”和“体素限制”设置足够高,可以代表模型的复杂性。 这些设置会影响在对象上模拟多少个控制点。 太少会导致不切实际的运动。 您可以通过启用Gizmos可视化来自这些点的力。
Triton船舶尾波
Triton可以为水面上的任何物体自动位移水面、渲染水沫效果和渲染螺旋桨反冲效果。要做到这一点,只需将Triton/TritonWakeGenerator脚本拖动到场景中任何包含TritonPrefab的对象上。至少,您需要输入Triton Wake Generator脚本的“长度”和"波束宽度"属性。 长度是船或物体的长度,波束宽度是船或物体背面的宽度,以米为单位。
螺旋桨反冲效果也可以通过 "螺旋桨冲刷 "和 "螺旋桨冲刷偏移 "属性进行切换,并对其原点位置进行调整。"LOD距离 "设置螺旋桨效果将其中的段数减半的距离,让你从远处一次看到更多的波浪。
"船头偏移 "可用于在产生尾气的物体前方产生水沫粒子。一般来说,这将是物体位置到物体前方的距离,以在船头产生水沫。在速度较高的情况下,船头的尾波也会在此位置被推起。其效果可以通过 "船首波浪规模 "参数进行缩放,并以 "船首波浪最大值 "为上限。艏尾会受到 "吃水 "(指船体在水面下延伸的距离)以及“船头大小”(对于大多数带有尖头弓的船舶而言,该大小应为零)的影响。
如果 "自动更新 "开启,速度将根据对象的运动自动计算。如果它是关闭的,你将需要自行更新“速度”属性。速度会影响尾波的高度和其上的泡沫量。
最后,"测试运动"复选框将使对象围绕摄像机位置旋转。当你还没有装备好对象的运动时,这对查看尾波效果很方便。
碰撞检测
TritonUnity脚本公开了两个可用于与水面进行碰撞检测的公共方法:public UnityEngine.Vector3 ClosestPointOnBounds(UnityEngine.Vector3 position)
public bool Raycast (Ray ray, out RaycastHit hitInfo, float distance)
这些方法与Unity自己的Collider接口的方法签名相同。它们将返回准确的碰撞点和海洋表面的法线,并考虑到所有的波浪和尾波。Triton不包括用于定位你的船的浮力模型,但这些方法会给你提供你需要的数据来驱动一个模型。
另外,我们公开:
公用浮点仪GetHeight(float x, float z)
假设负Y为“下”,则在给定的x,z位置检索波高。
转子冲刷效果
随附的RotorWash.cs脚本可以附加到任何对象,以从其位置生成转子冲刷效果。 转子冲刷会产生粒子效应和3D波位移。设置风速(以米/秒为单位),转子指向的方向(通常是向下或0,-1,0),转子的直径(以米为单位),Triton将完成其余的工作。
软件包随附的测试场景包括一个最初禁用的Sphere-RotorWash对象,该对象说明了用法。
请注意,在Unity将编辑器升级到64位(Unity 5)之前,启用转子冲刷功能可能会导致编辑器锁定,因为没有足够的内存来存储所有内容。 如果遇到此问题,请尝试在编辑器外部运行项目,这将消除此问题。
冲击效应
包含的Impact.cs脚本可以用来模拟物体撞击水面,根据物体的质量和速度踢起水沫和波浪。设置物体的直径(米)、速度(米/秒)、质量(公斤)以及从起始位置(指向水面)开始的方向。当你准备好触发效果时,将 "触发 "属性设置为true。在下一帧中,效果将被触发,并且触发属性将被清除,您可以重新使用冲击对象。软件包随附的测试场景包括一个最初禁用的Sphere-Impact对象,该对象说明了用法。
贴图纹理
Triton允许你在水面上应用任意的纹理。这对于像漂浮的海藻、油污或其他任何你能想到的效果都很有用。我们的软件包中附带了一个 "Decal Example "游戏对象,说明了如何设置一个贴图。基本上,创建一个游戏对象并将TritonDecal脚本附加到该对象。 为脚本属性分配纹理和贴花大小,然后将游戏对象的位置设置为想要贴花的位置。 请注意,您指定的Y位置在海平面上很重要。
在运行时,您可以调整贴纸纹理的不透明度,并调整贴纸的游戏对象的比例,而不会影响性能。您可以使用这个功能,通过随时间调整贴纸的不透明度和大小,为贴纸提供简单的动画。
改变基础尺寸、纹理或位置将导致基础贴纸被重新创建。
为了使贴花与移动的水面相吻合,贴花采用了延迟体积渲染技术。
Triton和透明效果
Unity的架构仅允许像我们这样的本机插件在相机渲染结束时进行渲染。 这可能会导致透明对象的排序问题,例如粒子效果,因为透明对象应始终在场景的最后渲染。解决此限制的方法是为透明对象创建单独的相机。 如果将透明对象分配给“透明FX”层,则可以使用剔除蒙版和摄影机深度顺序将透明对象挡在Triton绘制的主摄影机之外,并保留在Triton之后绘制的另一个摄影机中。 您需要通过使用相同的相机控制器来确保“透明相机”与主相机的方向保持同步,并且该透明相机不会清除颜色或深度缓冲区。
从Unity 5.1开始,具有延迟阴影的相机不再使用“请勿清除”标志。 这意味着要使用第二台照相机来获得透明效果。 如果将主摄像头设置为延迟,则必须将透明摄像头设置为旧延迟,以使其正常工作。 另一种选择是将两个摄像机都设置为前向渲染。
可以在http://media.sundog-soft.com/TritonRTTProblemTrans.zip中找到说明此技术的示例项目。
海岸效应和池塘
Triton可以制作海岸线和较小的水体以及开阔的海洋。要利用这个优势,请使用真实的 "水深 "数据制作你的地形,使其延伸到水面以下--也就是说,你的地形应该包括场景中的海底或池塘的底部。在Triton Prefab对象中启用“沿海效果”选项,Triton将从场景中自动生成一个高度图,用于确定每个点的水深。 当检测到浅水时,水的透明度将增加,海浪位移将减少,从而导致水/陆过渡平稳,并防止斑驳伪影。
透明度的大小可以通过“水下可见度”设置进行调整。 当照相机在水面之上时,请注意不要将其设置得太高,否则可能会导致水变得不切实际。 值在10-20米之间通常会产生良好的结果。
如果你的海岸包括一个平滑的海底,以几度的坡度下降,尝试将 "破浪振幅 "设置为现实的波浪高度,"破浪方向 "指向海岸。这将导致破浪效果,波浪会随着深度的减少而增长、减慢,最后扩散开来。
使用多台相机
如果您的场景包含多个摄像机,请将您的主摄像机与TritonPrefab的“游戏摄像机”属性相关联。 然后,将任何其他摄像机传递给TritonUnity.AddCamera()方法。 每个摄影机都会根据其位置渲染水,但是Triton的物理更新每帧只会运行一次。如果您有多台摄像机,但一次只有一台处于活动状态,则可以使用TritonUnity.SwitchCamera()在运行时在它们之间切换。
将Triton与线性色彩空间和HDR结合使用
一些流行的着色器程序包要求将项目设置为线性颜色空间,而不是gamma射线。 但是,Unity无法看到Triton的着色器,因此如果您的相机也启用了HDR,这将导致Triton的水太亮。解决方法是,您可以修改Triton的着色器以消除gamma射线校正的影响。 您将需要在文本编辑器中编辑TritonResources / flat-fft-patch.fx和TritonResources / flat-fft.fx文件。
在这些着色器的PS()函数的底部,您将看到以下几行:
#ifndef HDR
finalColor = clamp(finalColor, 0.0f, 1.0f);
#endif
return finalColor;
将此代码替换为:
return float4(pow(finalColor.xyz, 2.2), 1.0);
并且,这应该在线性色彩空间下提供正确的结果。
故障排除
如果将应用程序构建为单机可执行文件后无法正常工作,请确保阅读以上有关使用Triton分类应用程序的部分。如果水的方向似乎发生了偏移,则您可能正在使用一种图像效果,该图像效果使Unity在内部将场景上下颠倒渲染,而无需告诉Triton。 但是,有一种解决方法。 在UpdateMatrices方法的TritonUnity.cs文件中,您将看到以下代码块:
if (camera.actualRenderingPath == RenderingPath.DeferredLighting || camera.targetTexture != null)
{
Matrix4x4 pflip = Matrix4x4.Scale (new UnityEngine.Vector3(1.0f, -1.0f, 1.0f));
P = pflip * P;
}
基本上这是在尝试猜测Unity什么时候是上下颠倒渲染,但它忽略了图像效果的情况。只要注释掉if(...行(在if语句前加上一个//)来强制发生翻转,应该就会清楚了。
如果对象与其反射之间存在间隙,请尝试调整TritonReflection.cs顶部的clipPlaneOffset的值。
如果水的颜色看起来不对,请检查以下几项:
- 渲染设置中的环境光设置是否太低?
- 您是否忘了将定向光与Triton相关联? 如果不是,那光线指向的方向是否错误?
- 是不是你传来的立方体地图有问题?试着把它删除,然后激活自动生成立方体地图属性看看。
- 是否开启了 "使用渲染设置雾",在 "渲染设置 "中设置了过低的雾气密度?雾的颜色是否与一天中的时间一致?
- 您是否已从视频卡制造商安装了最新的图形驱动程序? 如果Triton由于驱动程序过时而无法利用CUDA和OpenCL等GPGPU技术,那么性能将会受到影响。
- 反射关卡吞噬了太多资源吗? 尝试禁用平面反射,看看是否有帮助-您可能需要自定义TritonReflection类,以仅将场景的一部分渲染为反射纹理。 如果您在每一帧都调用GenerateCubeMap(),请问问自己是否确实需要。
- 你的相机上的远景剪裁是否太近?应该至少50公里,地平线才会看起来正确。
- 您的天窗或穹顶距离相机太近了吗? 这可能会使远处的水面倒塌。 确保天空刚好在远裁剪平面内。
- 如果所有其他方法均失败,则可以使用TritonResources / Triton.config文件中的grid-horizon-offset设置来影响Triton的投影网格与水平线的对齐方式。 有效值将在±0.002之间。
- 在项目视图中重新导入有问题的脚本。 这些脚本可能已经从旧版Unity调用了过时的API,因此需要升级。 重新导入应强制升级,并可能更新所有其他有问题的脚本。
- 关闭/重新打开您的Unity项目。 如果所有其他脚本均失败,这将确保所有脚本都被强制更新和重新编译。
- 单击菜单栏。 只要编译中没有错误,这将使Unity更新对菜单栏的任何更改。
- 在Assets / Editor中重新导入TritonEditorTools.cs脚本。 在Unity 5中使用脚本时,可能需要对其进行更新。这样做之后,再次单击菜单栏以查看该选项是否出现。
- 关闭/重新打开你的Unity项目。这是一个结束,以迫使Unity升级任何可能需要升级的脚本。项目打开后,"Triton编辑选项 "应该显示在你的菜单栏上。
如果运行Oculus支持的应用程序会导致运行场景的视觉错觉,请关闭应用程序并重新运行。与Oculus硬件的连接可能没有正确连接。
如果在Unity 5编辑器中运行Triton导致发生涉及使用SetDirectoryDll的错误,则这是一个已知问题,开始在更高的Unity 5 beta版本中出现。 这些不会影响Triton在编辑器中的运行状态,也不会影响Unity 5的单机构建。
将Triton与SilverLining一起使用
Sundog Software还提供了适用于Unity的SilverLining Sky、3D Clouds和Weather资源(可通过Unity资源商店获得),通过使用以下设置,SilverLining和Triton可以无缝协作。- 使用LateUpdate调用的TritonUnity.GenerateCubeMap()脚本函数,只要天空发生变化,即可根据SilverLining的天空动态创建立方体贴图。
- 将SilverLining的SilverLiningSunLight(或SilverLiningMoonLight,视一天中的时间而定)光源关联为Triton的定向光。
- 如果您在Triton中使用雾气,请确保雾气颜色已更新为与一天中的时间一致。
- 确保_SilverLiningSky预制件上的比例尺至少增加到50公里,以确保对Triton的水进行适当的反射。 确保相机的远距离剪辑距离也至少设置为该值。
探索更多
在脚本层面,Triton可以提供更多的功能--整个C++ API可以通过TritonClassLibrary C# DLL获得。请参考 http://www.sundog-soft.com/docs/triton/index.html 的文档来了解更多关于可用的内容。在OS X上运行的注意事项
在OS X上运行Triton与Windows版本有一些区别。 这是由于操作系统本身的性质。 检查以下各项,以确保在Mac上运行时可能获得最佳体验。如果你有一块NVIDIA视频卡,Triton提供了对CUDA加速的支持。要启用该功能,您必须下载5.5.47或更高版本的CUDA驱动程序。通过系统偏好设置 > 其他 > CUDA 访问最新的驱动程序。点击 "安装CUDA更新"。在Mac OS X 10.9 Mavericks上需要该驱动程序的支持。
运行时,必须将Intel IPP库放置在应用程序中。 TritonUnity.cs中有代码可以自动执行此操作,但是如果您移动Resources文件夹但未选中它,则可能需要手动移动它们。 它们位于Assets> Triton> TritonResources> linux中,并且是此文件夹中的所有* .dylib文件。
在Triton.config中,有一些Mac专用的项目,即default-grid-resolution-mac和spair-force-point-sprites-mac。这些项目已经针对OS X的性能进行了调整,但您可以根据您的应用需求调整它们。请注意,默认设置会导致性能的大幅提升(每项设置约 8 fps)。
生成单机可执行文件时,请确保您复制Assets / Triton / TritonResources并粘贴到已生成的可执行文件旁边,以确保Triton正常运行。
与Windows版本一样,在OS X的Unity 5上使用Triton可能需要您更新包含的Triton脚本。 如果在Triton游戏对象上看到编译警告和缺少Monobehaviour脚本,请参考“故障排除”部分。
OS X上Unity 5的Triton提供了与Windows版Triton相同的更新插件导入设置的编辑器选项。请参考 "使用Triton - Unity 5分类您的应用程序 "部分,了解如何运行该选项的更多细节。在您尝试构建独立的可执行文件之前,请先运行此选项。