虚拟实验室-Unreal 版本

虚拟实验室的Unreal 版本,第一个版本主要是以《探究通电螺线管外部的磁场分布》颗粒为例,设计和开发一个正式版本。


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;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> &quot;Soft Outlines&quot;) 二次开发的。 跟先前Demo中使用的高亮技术方案一致,都是基于后处理材质实现的。而不同的是,此后处理效果基于自定义HLSL代码,旨在以最有效的方式实现柔和的描边(高亮)效果。通过利用<strong>时域抗锯齿</strong>(TAA) 来实现的,TAA 可以将计算分散到多个帧上,从而显著降低性能开销。</p> <h1>兼容性</h1> <h2>受支持的虚幻引擎版本</h2> <p>UE4.21 – 4.27和5.0 – 5.5 &gt; 当前版本适配到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 &gt; 加粗的是已自测,其他平台理论上也可以。</li> </ul> <h1>使用说明</h1> <h2>1. 初始化</h2> <p>初始化主要是进行动态创建PostProcessVolume并进行相应设置,自动设置默认的高亮材质。 &gt; 默认的高亮材质可以在VLabHighlight.cpp的StartupModule方法中修改。</p> <p><strong>调用时机:</strong>在关卡加载完成后</p> <pre><code class="language-cpp">#include &amp;quot;VLabHighlight.h&amp;quot; #include &amp;quot;Engine/World.h&amp;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&amp;#039;s Actor UVLabHighlightComponent* HighlightComponent = Element-&amp;gt;FindComponentByClass&amp;lt;UVLabHighlightComponent&amp;gt;(); if (!HighlightComponent) { HighlightComponent = NewObject&amp;lt;UVLabHighlightComponent&amp;gt;(Element); Element-&amp;gt;AddInstanceComponent(HighlightComponent); HighlightComponent-&amp;gt;RegisterComponent(); } HighlightComponent-&amp;gt;Highlight(bOn);</code></pre> <h2>3. 高亮自动延时关闭</h2> <pre><code class="language-cpp">HighlightComponent-&amp;gt;DelayTime = 3.0f;//3秒后自动关闭高亮效果</code></pre> <h2>4. 修改高亮样式</h2> <pre><code class="language-cpp">HighlightComponent-&amp;gt;ChangeHighlightStyle(5); // 传入所需的索引值[0,19]</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=751f9ab1e0681894ab82c0a00f657ae7&amp;amp;file=file.png" alt="" /></p> <h2>5. 高亮节点设定</h2> <ul> <li>有时期望只高亮部分节点,而另外节点不高亮</li> <li>只高亮某个节点</li> </ul> <pre><code class="language-cpp">//需要高亮的节点数组 TArray&amp;lt;FString&amp;gt; HighlightNodes = { TEXT(&amp;quot;Node1&amp;quot;), TEXT(&amp;quot;Node2&amp;quot;) }; //不需要高亮的节点数组 TArray&amp;lt;FString&amp;gt; NonHighlightNodes = { TEXT(&amp;quot;Node3&amp;quot;), TEXT(&amp;quot;Node4&amp;quot;) }; HighlightComponent-&amp;gt;HighlightByNodes(HighlightNodes, NonHighlightNodes); //高亮单个节点 HighlightComponent-&amp;gt;HighlightByNode(TEXT(&amp;quot;MeshComponentName&amp;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;amp;file=file.png" alt="" /></p> <h2>8. 蓝图用法</h2> <p>详见<strong>附录</strong>文档 &gt; 器材通过蓝图配置是支持的,但是已经被废弃了。 要求有交互组件进行接入,目前是拼接有接入了。</p> <h1>附录</h1> <p>[旧版文档-基础能力-高亮(含蓝图用法)](<a href="https://www.showdoc.com.cn/virtualLabUnreal/11476029421010700">https://www.showdoc.com.cn/virtualLabUnreal/11476029421010700</a> &quot;旧版文档-基础能力-高亮(含蓝图用法)&quot;)</p>

页面列表

ITEM_HTML