VLabHightlight-高亮
<table>
<thead>
<tr>
<th>作者</th>
<th>QFord(350107)</th>
</tr>
</thead>
<tbody>
<tr>
<td>创建日期</td>
<td>2024-12-10</td>
</tr>
<tr>
<td>更新日期</td>
<td>2024-12-11</td>
</tr>
<tr>
<td>版本</td>
<td>V1.0.1</td>
</tr>
</tbody>
</table>
<p>[TOC]</p>
<h1>代码概述</h1>
<p><strong>高亮</strong>已整合到VlabPerformance插件中,以模块的形式存在,如下图所示:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a655179f08aacda917bf731d00223f93&amp;file=file.png" alt="" /></p>
<h1>实现原理</h1>
<p><strong>高亮(描边)</strong>是基于Fab的[Soft Outlines](<a href="https://www.fab.com/zh-cn/listings/20739703-ec41-45d1-9f34-068f5db6f170">https://www.fab.com/zh-cn/listings/20739703-ec41-45d1-9f34-068f5db6f170</a> "Soft Outlines") 二次开发的。
跟先前Demo中使用的高亮技术方案一致,都是基于后处理材质实现的。而不同的是,此后处理效果基于自定义HLSL代码,旨在以最有效的方式实现柔和的描边(高亮)效果。通过利用<strong>时域抗锯齿</strong>(TAA) 来实现的,TAA 可以将计算分散到多个帧上,从而显著降低性能开销。</p>
<h1>兼容性</h1>
<h2>受支持的虚幻引擎版本</h2>
<p>UE4.21 – 4.27和5.0 – 5.5
> 当前版本适配到5.3.2,更高版本需要更新<strong>Soft Outlines</strong>。</p>
<h2>受支持的目标平台</h2>
<ul>
<li><strong>Android</strong></li>
<li>iOS</li>
<li>Linux</li>
<li><strong>Windows</strong></li>
<li>Win32</li>
<li>SteamVR / HTC Vive</li>
<li>PS4</li>
<li>Oculus</li>
<li>Mac</li>
<li>Xbox One</li>
<li>Nintendo Switch
> 加粗的是已自测,其他平台理论上也可以。</li>
</ul>
<h1>使用说明</h1>
<h2>1. 初始化</h2>
<p>初始化主要是进行动态创建PostProcessVolume并进行相应设置,自动设置默认的高亮材质。
> 默认的高亮材质可以在VLabHighlight.cpp的StartupModule方法中修改。</p>
<p><strong>调用时机:</strong>在关卡加载完成后</p>
<pre><code class="language-cpp">#include &quot;VLabHighlight.h&quot;
#include &quot;Engine/World.h&quot;
//Some codes here
UWorld* World = ...;//Current World Instance
FVLabHighlightModule::Get().Init(World);</code></pre>
<h2>2. 动态添加VLabHightlight Actor Component</h2>
<pre><code class="language-cpp"> AActor* Element = ...;//Element&#039;s Actor
UVLabHighlightComponent* HighlightComponent = Element-&gt;FindComponentByClass&lt;UVLabHighlightComponent&gt;();
if (!HighlightComponent)
{
HighlightComponent = NewObject&lt;UVLabHighlightComponent&gt;(Element);
Element-&gt;AddInstanceComponent(HighlightComponent);
HighlightComponent-&gt;RegisterComponent();
}
HighlightComponent-&gt;Highlight(bOn);</code></pre>
<h2>3. 高亮自动延时关闭</h2>
<pre><code class="language-cpp">HighlightComponent-&gt;DelayTime = 3.0f;//3秒后自动关闭高亮效果</code></pre>
<h2>4. 修改高亮样式</h2>
<pre><code class="language-cpp">HighlightComponent-&gt;ChangeHighlightStyle(5); // 传入所需的索引值[0,19]</code></pre>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=751f9ab1e0681894ab82c0a00f657ae7&amp;file=file.png" alt="" /></p>
<h2>5. 高亮节点设定</h2>
<ul>
<li>有时期望只高亮部分节点,而另外节点不高亮</li>
<li>只高亮某个节点</li>
</ul>
<pre><code class="language-cpp">//需要高亮的节点数组
TArray&lt;FString&gt; HighlightNodes = { TEXT(&quot;Node1&quot;), TEXT(&quot;Node2&quot;) };
//不需要高亮的节点数组
TArray&lt;FString&gt; NonHighlightNodes = { TEXT(&quot;Node3&quot;), TEXT(&quot;Node4&quot;) };
HighlightComponent-&gt;HighlightByNodes(HighlightNodes, NonHighlightNodes);
//高亮单个节点
HighlightComponent-&gt;HighlightByNode(TEXT(&quot;MeshComponentName&quot;));</code></pre>
<h2>6. 启用/禁用 高亮</h2>
<pre><code class="language-cpp">UVLabHighlightComponent::EnablePostProcessHighlight(true); // 启用后处理高亮
UVLabHighlightComponent::EnablePostProcessHighlight(false); // 禁用后处理高亮</code></pre>
<h2>7. 配置固定非高亮节点</h2>
<p>对于液体、药品等不需要高亮的节点进行配置(暂放代码中),详见下图:
<img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=ff63b3a97bc96f841c364fb2c847602d&amp;file=file.png" alt="" /></p>
<h2>8. 蓝图用法</h2>
<p>详见<strong>附录</strong>文档
> 器材通过蓝图配置是支持的,但是已经被废弃了。
要求有交互组件进行接入,目前是拼接有接入了。</p>
<h1>附录</h1>
<p>[旧版文档-基础能力-高亮(含蓝图用法)](<a href="https://www.showdoc.com.cn/virtualLabUnreal/11476029421010700">https://www.showdoc.com.cn/virtualLabUnreal/11476029421010700</a> "旧版文档-基础能力-高亮(含蓝图用法)")</p>