<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[PureWeb Reality Resource Hub]]></title><description><![CDATA[PureWeb Reality Resource Hub]]></description><link>https://developer.pureweb.io/</link><image><url>https://developer.pureweb.io/favicon.png</url><title>PureWeb Reality Resource Hub</title><link>https://developer.pureweb.io/</link></image><generator>Ghost 4.6</generator><lastBuildDate>Sat, 14 Mar 2026 23:43:44 GMT</lastBuildDate><atom:link href="https://developer.pureweb.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Implementing Session Reset and Stream Disconnection]]></title><description><![CDATA[<p>If you&apos;re looking to enable a session reset functionality in your custom client, our latest SDK release (version 4.10.2) introduces this capability. Below is a step-by-step guide on how to implement session reset that will allow for efficient session management and improved user experience when handling</p>]]></description><link>https://developer.pureweb.io/session-reset-stream-interruptions/</link><guid isPermaLink="false">67229ed0040ed70001550d4e</guid><category><![CDATA[UE - Unreal Engine]]></category><category><![CDATA[Unity]]></category><category><![CDATA[Web Client]]></category><category><![CDATA[SDK]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Wed, 30 Oct 2024 21:12:55 GMT</pubDate><content:encoded><![CDATA[<p>If you&apos;re looking to enable a session reset functionality in your custom client, our latest SDK release (version 4.10.2) introduces this capability. Below is a step-by-step guide on how to implement session reset that will allow for efficient session management and improved user experience when handling multiple streams.</p><h3 id="step-1-sdk-version-requirement">Step 1: SDK Version Requirement</h3><p>Ensure you are using SDK version 4.10.2 or higher. You can test this functionality in the latest web template client or in your own custom client by following Steps 2-4 below. Please refer to the instructions <a href="https://developer.pureweb.io/upgrade-existing-client/">here</a> to update your existing web client to the latest SDK.</p><h3 id="step-2-implement-the-onclose-function">Step 2: Implement the onClose Function</h3><p>In your <code>App.tsx</code> file, add an <code>onClose</code> function to handle the session reset. This function closes the current session, resets hooks, and manages the loading state.</p><pre><code class="language-javascript">onClose={async () =&gt; {
  if (launchRequest) {
    await launchRequest.close(platform);
    // Reset the hooks
    resetLaunchRequest();
    resetStreamer();
    // Reset loading state
    setLoading(false);
  }
}}</code></pre><p>Pass this <code>onClose</code> function to your streaming view, where it will be invoked when the session needs to end.</p><h3 id="step-3-add-a-close-button-to-embeddedview">Step 3: Add a Close Button to EmbeddedView</h3><p>In the <code>EmbeddedView</code> component, add a close button to trigger the <code>onClose</code> &#xA0;function. Place it in the top right corner and hide it conditionally based on session state or device compatibility.</p><pre><code class="language-javascript">&lt;Button
  onClick={props.onClose}
  style={{ position: &apos;absolute&apos;, top: 10, right: 10 }}
  className={isIPhone || handle.active || props.StreamerStatus !== StreamerStatus.Connected ? &apos;hidden&apos; : &apos;&apos;}&gt;
  &lt;Icon name=&quot;window close outline&quot; /&gt;
&lt;/Button&gt;
</code></pre><p>This button will be available only when appropriate, based on &quot;StreamerStatus.&quot;</p><h3 id="step-4-reset-to-launch-view-on-session-completion">Step 4: Reset to Launch View on Session Completion</h3><p>In the <code>App.tsx</code>, monitor the stream status, and reset to initial launch view when the session ends <code>StreamerStatus.Completed</code>.</p><pre><code class="language-javascript">if (streamerStatus === StreamerStatus.Completed) {
  return &lt;LaunchView Launch={launch} /&gt;;
}
</code></pre><h3 id="important-notes">Important Notes</h3><ul><li>Note that launching a new session will not work on the sessions that require fixed <code>environmentId</code> or on collaboration sessions. </li><li>Every time a session is reset the launch request will work on the new unique <code>environmentId</code>.</li></ul>]]></content:encoded></item><item><title><![CDATA[Pre-Caching the Latency Check with the PureWeb SDK]]></title><description><![CDATA[<p>When you trigger a launch request, the first thing our SDK does is test the user&apos;s network latency to all of our possible server endpoints. This process takes between 0.7 and 2 seconds.</p><p>Many experiences on our platform have use cases where an interactive stream doesn&#x2019;</p>]]></description><link>https://developer.pureweb.io/latency-check-cache/</link><guid isPermaLink="false">6716c153040ed70001550ca9</guid><category><![CDATA[SDK]]></category><category><![CDATA[Web Client]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Mon, 21 Oct 2024 21:16:52 GMT</pubDate><content:encoded><![CDATA[<p>When you trigger a launch request, the first thing our SDK does is test the user&apos;s network latency to all of our possible server endpoints. This process takes between 0.7 and 2 seconds.</p><p>Many experiences on our platform have use cases where an interactive stream doesn&#x2019;t start immediately when the user navigates to the page, but instead starts in response to a user interaction. For example, in an architectural configurator a configuration page may load first, but the user can later switch to a pixel streamed view vs 2D images by toggling a control in the web client.</p><p>In order to use the pre-caching feature, there are some necessary platform connection activities that can be done in advance of the user launching a stream. By performing these activities when the page loads, you can reduce the perceived time-to-first-frame for your users.</p><p>Our SDK now implements an <code>await platform.getLatencyMeasurements();</code> call. This call can be made immediately after your call to <code>platform.connect();</code>, which can happen any time before the user action triggers a <code>queueLaunchRequest();</code>.</p><p>In order to use this feature you will need to use version 4.10.2 or higher of our SDK, which can be downloaded here: <a href="https://www.npmjs.com/package/@pureweb/platform-sdk/v/4.10.2" rel="noopener noreferrer">npm: @pureweb/platform-sdk</a>.</p>]]></content:encoded></item><item><title><![CDATA[Prepare your Unreal 5.5 package]]></title><description><![CDATA[Developer resources and tips on how to prepare, optimize, test and package your Unreal 5 project. ]]></description><link>https://developer.pureweb.io/prepare-your-unreal-5-package/</link><guid isPermaLink="false">629f7fe8bb5a940001ea530b</guid><category><![CDATA[Getting Started]]></category><category><![CDATA[UE - Unreal Engine]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Tue, 08 Oct 2024 19:00:00 GMT</pubDate><media:content url="https://developer.pureweb.io/content/images/2022/06/ue-5-banner.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://developer.pureweb.io/content/images/2022/06/ue-5-banner.jpeg" alt="Prepare your Unreal 5.5 package"><p><em><strong>This article is not necessary if your game uses CloudXR.</strong></em></p><p><em><strong>NOTE: If you&apos;re working with Unreal Engine 5.5, you can follow this guide for Unreal Engine 5.5 with only one key adjustment. Simply download and use the correct <u><a href="https://pureweb-na.s3.us-east-1.amazonaws.com/nightlies/PixelStreaming/platform-plugin-unreal-5.5-5.2.0-234d64b.zip">PureWeb 5.5 plugin</a></u> compatible with your UE 5.5 version, and you&apos;ll be ready to proceed with the same setup steps provided below. </strong></em></p><h2 id="overview">Overview</h2><h3 id="prerequisites">Prerequisites</h3><ul><li>A game developed in Unreal Engine 5.5<br>(<em>If you are using Unreal 4.27, <a href="https://developer.pureweb.io/prepare-your-unreal-package/">click here</a> for preparation instructions)</em></li></ul><p>Watch a short video of the process:</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/T88cpz8g9OQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Getting Started with PureWeb Reality&#x2122; - Prepare Your Unreal Engine Project"></iframe></figure><h3 id="version-support">Version Support</h3><p>These instructions assume you are running Unreal Engine 5.5 and have the associated 5.5 PureWeb plugin.</p><p>If you are upgrading your project from a previous version of Unreal 5 project to 5.5, please ensure that you fully remove the version of the PureWeb Plugin in your project, and replace it with the 5.5 version.</p><p><a href="https://developer.pureweb.io/deprecation-policy/">Click here for more information on our deprecation policy.</a></p><h2 id="prepare-your-unreal-game-for-cloud-deployment">Prepare Your Unreal Game For Cloud Deployment</h2><h3 id="create-a-c-class-if-necessary">Create a C++ Class If Necessary</h3><p>Currently, the PureWeb plugin will only successfully be built into your project if your project contains at least one C++ file. If you already have some in your project, then you can skip to the next step.</p><p>If you do not have any C++ files in your project, creating a single empty C++ class in the Unreal Editor will be sufficient.</p><p>From the menu bar, click Tools/New C++ Class, click &quot;None&quot;, give your class a name and click the &quot;Create Class&quot; button.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2022/06/08_newClass.png" class="kg-image" alt="Prepare your Unreal 5.5 package" loading="lazy" width="290" height="116"></figure><p><em>NOTE: You will likely need to close and reopen the project and allow the Unreal Editor to rebuild the project before continuing with the next step. Should you encounter compilation issues through Visual Studio then please follow these steps <strong><a href="https://developer.pureweb.io/compile-unreal-vs/">here</a></strong>.</em></p><h3 id="add-the-pureweb-plugin">Add the PureWeb Plugin</h3><p>In order to stream your game on the PureWeb Reality platform, you&#x2019;ll need our plugin. </p><p>5.5 Plugin: <a href="https://pureweb-na.s3.us-east-1.amazonaws.com/nightlies/PixelStreaming/platform-plugin-unreal-5.5-5.2.0-234d64b.zip">The 5.5 version of the PureWeb plugin can be downloaded here</a>.</p><p>5.4 Plugin: <a href="https://pureweb-na.s3.amazonaws.com/nightlies/PixelStreaming/platform-plugin-unreal-5.4-5.2.0-bf0d233.zip">The 5.4 version of the PureWeb plugin can be downloaded here</a>.</p><p>5.3 Plugin: <a href="https://pureweb-na.s3.amazonaws.com/nightlies/PixelStreaming/platform-plugin-unreal-5.3-5.2.0-f8f616b.zip">The 5.3 version of the PureWeb plugin can be downloaded here.</a></p><p>Browse to the project folder for your game, and in the folder that contains <em>[ProjectName].uproject</em> create a folder called <em>Plugins</em> if one doesn&#x2019;t already exist.</p><p>Unzip the PureWeb Platform plugin, putting the <em>PureWeb</em> folder into the <em>Plugins</em> folder from the previous step. You should have a folder structure that resembles the following:</p><pre><code class="language-folder">[ProjectFolder]\
	[ProjectName].uproject
    Plugins\
    	PureWeb</code></pre><p>The PureWeb Platform Plugin should now show up in the list of installed plugins. Make sure that the box next to <em>Enabled</em> is checked. You may need to close and reopen your project for the PureWeb Platform Plugin to become visible.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/10/UnrealEditor_PW5_Plugin.png" class="kg-image" alt="Prepare your Unreal 5.5 package" loading="lazy" width="1254" height="248" srcset="https://developer.pureweb.io/content/images/size/w600/2024/10/UnrealEditor_PW5_Plugin.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/10/UnrealEditor_PW5_Plugin.png 1000w, https://developer.pureweb.io/content/images/2024/10/UnrealEditor_PW5_Plugin.png 1254w" sizes="(min-width: 720px) 720px"></figure><p><em>NOTE: When you add our plugin, it will also enable Unreal Engine&apos;s built-in Pixel Streaming plugin.</em></p><h3 id="add-the-pureweb-actor-to-your-scene">Add the PureWeb a<strong>ctor to your scene</strong></h3><p>In the <strong>Content Browser</strong>, click on <strong>PureWeb Platform Plugin Content</strong> and drag the <strong>PureWebActor</strong> into the scene.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2022/06/03_PW-Actor.PNG" class="kg-image" alt="Prepare your Unreal 5.5 package" loading="lazy" width="530" height="253"></figure><blockquote><strong>Note:</strong> If you do not see the PureWeb Content in the Content Browser, click on &quot;Settings&quot; in the top right of the content browser and enable &quot;Show Plugin content&quot;.</blockquote><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2022/06/02_PW-Actor-1.PNG" class="kg-image" alt="Prepare your Unreal 5.5 package" loading="lazy" width="261" height="360"></figure><h3 id="configure-the-in-game-mouse-pointer">Configure the in-game mouse pointer</h3><p>Pixel Streaming through the PureWeb Platform works best when the cursor is rendered locally only. The default used by the Unreal Pixel Streaming Plugin is to render a remote software cursor, but we want to set this cursor to None in the Pixel Streaming Configuration before packaging.</p><p>Open the Project Settings window and scroll down to PixelStreaming under the Plugins heading. Change the setting for Pixel Streamer Default Cursor Class Name to None.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://developer.pureweb.io/content/images/2022/06/04_MouseSettings.PNG" class="kg-image" alt="Prepare your Unreal 5.5 package" loading="lazy" width="950" height="600" srcset="https://developer.pureweb.io/content/images/size/w600/2022/06/04_MouseSettings.PNG 600w, https://developer.pureweb.io/content/images/2022/06/04_MouseSettings.PNG 950w"></figure><p>For most projects, you will want to configure your Viewport to only capture during mouse down. The Default Viewport Mouse Capture Mode setting is found under Engine - Input\Viewport Properties in the Project Settings window.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://developer.pureweb.io/content/images/2022/06/05_MouseSettings-2.PNG" class="kg-image" alt="Prepare your Unreal 5.5 package" loading="lazy" width="950" height="600" srcset="https://developer.pureweb.io/content/images/size/w600/2022/06/05_MouseSettings-2.PNG 600w, https://developer.pureweb.io/content/images/2022/06/05_MouseSettings-2.PNG 950w"></figure><h3 id="disable-motion-blur">Disable Motion Blur</h3><p>Motion blur affects the performance of the stream negatively, putting unnecessary load on the server without little or no gain on the client side so we recommend disabling it. </p><p>The Motion Blur setting can be found under Engine - Rendering\Default Settings in the Project Settings window.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://developer.pureweb.io/content/images/2022/06/06_motionBlur.PNG" class="kg-image" alt="Prepare your Unreal 5.5 package" loading="lazy" width="950" height="600" srcset="https://developer.pureweb.io/content/images/size/w600/2022/06/06_motionBlur.PNG 600w, https://developer.pureweb.io/content/images/2022/06/06_motionBlur.PNG 950w"></figure><h3 id="enable-%E2%80%9Chardware-video-decoder%E2%80%9D">Enable &#x201C;Hardware Video Decoder&#x201D;</h3><p>When playing back full motion video (FMV) in your project you may want to activate Hardware Accelerated Video Decoding. Although currently experimental, enabling this feature reduces the strain on the CPU.</p><p>To use this, enable the Hardware Accelerated Video Decoding (Experimental) setting in the Plugins - WMF Media section of the Project Settings window.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://developer.pureweb.io/content/images/2022/06/07_wmfDecoder.PNG" class="kg-image" alt="Prepare your Unreal 5.5 package" loading="lazy" width="950" height="600" srcset="https://developer.pureweb.io/content/images/size/w600/2022/06/07_wmfDecoder.PNG 600w, https://developer.pureweb.io/content/images/2022/06/07_wmfDecoder.PNG 950w"></figure><h2 id="package-your-game">Package Your Game</h2><p>Package your game for Windows only, and please do not use spaces in your folder or file names.</p><p><em><strong>We recommend using the default Windows compression tool to zip your game package prior to uploading it to your console account.</strong></em></p><p>The folder structure of the zip file should look similar to this:</p><figure class="kg-card kg-code-card"><pre><code class="language-folder">[ProjectName.zip]
	Engine/
    Source/Programs/PixelStreaming
	[ProjectName]/
    [ProjectName.exe]</code></pre><figcaption>Unreal Package Folder Structure</figcaption></figure><blockquote><strong>Note:</strong> In some cases the Source/Programs folder might not be created and the PixelStreaming folder will be created elsewhere (such as Samples). Provided the PixelStreaming folder is present, the game package should function correctly on our platform.</blockquote><h2 id="next-steps">Next Steps</h2><p>Now that your game is configured and packaged you&#x2019;re ready to:</p><ul><li><a href="https://developer.pureweb.io/test-streaming-locally">Test Streaming Locally</a></li><li><a href="https://developer.pureweb.io/upload-and-test-in-the-cloud">Upload and Test Your Package in the Cloud</a></li><li><a href="https://developer.pureweb.io/unreal-best-practices/">Optimize your Unreal package for online distribution</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Prepare your Unity package]]></title><description><![CDATA[Developer resources and tips on how to prepare, optimize, test and package your Unity project. ]]></description><link>https://developer.pureweb.io/prepare-your-unity-package/</link><guid isPermaLink="false">60edf18135135b0001f35bc3</guid><category><![CDATA[Getting Started]]></category><category><![CDATA[Unity]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Mon, 23 Sep 2024 15:00:00 GMT</pubDate><media:content url="https://developer.pureweb.io/content/images/2021/07/iStock-841135930.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://developer.pureweb.io/content/images/2021/07/iStock-841135930.jpg" alt="Prepare your Unity package"><p><em><strong>This article is not necessary if your game uses CloudXR.</strong></em></p><h2 id="overview">Overview</h2><p><em><strong>Important:</strong> Your Unity game must use the Mono scripting engine and implement the new Input System to function correctly on our platform.</em></p><p>The current version of the PureWeb Unity plugin has full support for Unity engine 2022 LTS and 2023, and platform support for 2021 LTS, and requires the following packages:</p><ul><li>Input System 1.6.1</li><li>WebRTC 3.0.0-pre.7, and</li><li>version 4.4.0 of the PureWeb SDK</li></ul><p>Please see our <a href="https://developer.pureweb.io/deprecation-policy/">deprecation policy</a> for more information about full vs. platform support.</p><p>Watch a short video of the process:</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/JPwRdd_PlBk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Getting Started with PureWeb Reality&#x2122; - Prepare Your Unity Project"></iframe></figure><h2 id="preparation">Preparation</h2><p><strong><em>Important:</em> </strong>Make sure that the project <em>does not</em> have Input System and/or WebRTC package already imported. The correct versions will be installed as dependencies when you install our Unity Plugin.</p><h3 id="install-enable-the-pureweb-plugin">Install &amp; Enable the PureWeb Plugin</h3><p>In order to properly stream your game through PureWeb Reality you&#x2019;ll need to <a href="https://pureweb-na.s3.amazonaws.com/nightlies/PixelStreaming/com.pureweb.platform-3.1.0.tgz">download the latest version of the PureWeb Platform Unity plugin</a>.</p><p>Add the PureWeb Platform plugin package to your project through the Unity Package Manager. Under the (+) icon click &apos;Add package from tarball&apos; and then select the package file you just downloaded.</p><p>If you prefer, you can copy the package into your game&apos;s Assets directory instead.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2021/07/Unity_Prepare_01-PackageManager.png" class="kg-image" alt="Prepare your Unity package" loading="lazy" width="802" height="569" srcset="https://developer.pureweb.io/content/images/size/w600/2021/07/Unity_Prepare_01-PackageManager.png 600w, https://developer.pureweb.io/content/images/2021/07/Unity_Prepare_01-PackageManager.png 802w" sizes="(min-width: 720px) 720px"></figure><p>After the import process is complete you&apos;ll find the PureWeb Platform plugin under the Custom header in the Package Manager window.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2021/07/Unity_Prepare_02-PureWebPlugin.png" class="kg-image" alt="Prepare your Unity package" loading="lazy" width="802" height="569" srcset="https://developer.pureweb.io/content/images/size/w600/2021/07/Unity_Prepare_02-PureWebPlugin.png 600w, https://developer.pureweb.io/content/images/2021/07/Unity_Prepare_02-PureWebPlugin.png 802w" sizes="(min-width: 720px) 720px"></figure><h3 id="create-a-purewebstreaming-game-object">Create a PureWebStreaming Game Object</h3><p>We will create an empty game object and associate the PureWebStreaming script with it.</p><p>Create an empty object in your scene.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2022/12/Unity-Message-01.PNG" class="kg-image" alt="Prepare your Unity package" loading="lazy" width="434" height="466"></figure><p>You can name it anything you like in order to make your objects easier to manage. We&apos;ll call ours PlatformPlugin.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2022/12/Unity_Prepare_03-EmptyAdded.png" class="kg-image" alt="Prepare your Unity package" loading="lazy" width="457" height="173"></figure><p>In the Packages &gt; PureWeb Platform &gt; Runtime folder, find the PureWebStreaming.cs and attach it to the object we just created by dragging it to the our PlatformPlugin object. Alternatively, you can import it by selecting &#x201C;Add Component&#x201D; in the object inspector. Either way it should like similar to this:</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2022/12/Unity_Prepare_04-ScriptComponent.png" class="kg-image" alt="Prepare your Unity package" loading="lazy" width="463" height="157"></figure><p>There is no strict rule about which object the PureWebStreaming.cs file should be attached to, or where the file should be located. You can still attach it to another existing game object if your project has special requirements, but it is strongly recommended to create a standalone object for the PureWebStreaming.cs file for proper object management.</p><h2 id="package-your-game">Package Your Game</h2><h3 id="mono-scripting-engine">Mono Scripting Engine</h3><p>Ensure that you have the correct scripting engine enabled for your project to work on the PureWeb Reality platform.</p><p>Open the project settings window. Under Player &gt; Other Settings &gt; Configuration &gt; Scripting Backend, and make sure that the Mono option is selected.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2022/12/Unity_Prepare_00a-Prerequisites-Mono.PNG" class="kg-image" alt="Prepare your Unity package" loading="lazy" width="764" height="149" srcset="https://developer.pureweb.io/content/images/size/w600/2022/12/Unity_Prepare_00a-Prerequisites-Mono.PNG 600w, https://developer.pureweb.io/content/images/2022/12/Unity_Prepare_00a-Prerequisites-Mono.PNG 764w" sizes="(min-width: 720px) 720px"></figure><h3 id="unity-input-system">Unity Input System</h3><p>Unity render streaming requires the new Input System package.</p><p>In order for the game to receive inputs from the browser during streaming, your game <strong>must</strong> implement the new Input System Package. Otherwise, you will not be able to interact with the streamed game.</p><p><em><strong>NOTE: </strong>If you need to switch your project to the new Input System, please make sure you have saved and made a backup before doing so! Once you switch it to the new Input System Package, the Unity Editor will restart your project in order to enable the new package.</em></p><p>Open the project settings window. Under Player &gt; Other Settings &gt; Configuration &gt; Active Input Handling, and make sure that the Input System Package (New) option is selected.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2022/12/Unity_Prepare_00b-Prerequisites-InputSystem.PNG" class="kg-image" alt="Prepare your Unity package" loading="lazy" width="764" height="149" srcset="https://developer.pureweb.io/content/images/size/w600/2022/12/Unity_Prepare_00b-Prerequisites-InputSystem.PNG 600w, https://developer.pureweb.io/content/images/2022/12/Unity_Prepare_00b-Prerequisites-InputSystem.PNG 764w" sizes="(min-width: 720px) 720px"></figure><p><em><strong>NOTE: </strong>Selecting the &quot;Input Manager (old)&quot;, or &quot;Both&quot; options <strong>will not</strong> work. If you choose one of these, you&apos;ll be unable to interact with the streamed game in the browser.</em></p><h3 id="build-package">Build &amp; Package</h3><p>Package the project for Windows, and ensure that the output folder structure follows the one below before zipping &amp; uploading it to the PureWeb Console.</p><p><em><strong>We recommend using the default Windows compression tool to zip your game package prior to uploading.</strong></em></p><p>Please do not use spaces in your folder or file names.</p><figure class="kg-card kg-code-card"><pre><code class="language-Folder Structure">[ProjectName.zip]
	MonoBleedingEdge
	[ProjectName]_Data
    UnityCrashHandler64.exe
    UnityPlayer.dll
    [ProjectName].exe</code></pre><figcaption>Unity Project Package Folder Structure</figcaption></figure><h2 id="next-steps">Next Steps</h2><p>Now that your game is configured and packaged you&#x2019;re ready to:</p><ul><li><a href="https://developer.pureweb.io/test-streaming-locally">Test Streaming Locally</a></li><li><a href="https://developer.pureweb.io/upload-and-test-in-the-cloud">Upload and Test Your Package in the Cloud</a></li><li><a href="https://developer.pureweb.io/unity-best-practices/">Optimize your Unity package for online distribution</a></li></ul><h2 id="further-reading">Further Reading</h2><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://developer.pureweb.io/unity-aspect-ratio/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Why is the aspect ratio of my Unity stream incorrect?</div><div class="kg-bookmark-description">If the aspect ratio of your Unity stream is not what you expect, there may be a reason for it, and a way to fix it!</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://developer.pureweb.io/favicon.png" alt="Prepare your Unity package"><span class="kg-bookmark-author">PureWeb Reality Resource Hub</span><span class="kg-bookmark-publisher">PureWeb</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://developer.pureweb.io/content/images/2021/07/AdobeStock_272314124.jpeg" alt="Prepare your Unity package"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[PureWeb Cloud XR Troubleshooting Guide]]></title><description><![CDATA[<h2 id="unreal-cloud-xr-troubleshooting">Unreal Cloud XR Troubleshooting</h2><h3 id="black-screen">Black Screen</h3><p>We have noticed that displaying certain text on the screen can lead to black screen problems. For example, running the <code>stats FPS</code> command to show the FPS or having messages like <em>&quot;Lighting needs to be rebuilt&quot; </em>can cause the stream to display</p>]]></description><link>https://developer.pureweb.io/pureweb-cloud-xr-troubleshooting-guide/</link><guid isPermaLink="false">66c795c144d19b000192f632</guid><category><![CDATA[CloudXR]]></category><category><![CDATA[UE - Unreal Engine]]></category><category><![CDATA[Unity]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Fri, 20 Sep 2024 18:15:57 GMT</pubDate><content:encoded><![CDATA[<h2 id="unreal-cloud-xr-troubleshooting">Unreal Cloud XR Troubleshooting</h2><h3 id="black-screen">Black Screen</h3><p>We have noticed that displaying certain text on the screen can lead to black screen problems. For example, running the <code>stats FPS</code> command to show the FPS or having messages like <em>&quot;Lighting needs to be rebuilt&quot; </em>can cause the stream to display a black screen.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image.png" class="kg-image" alt loading="lazy" width="448" height="91"></figure><p>To address the issue with the <code>stats FPS</code><strong> </strong>command, we recommend removing the FPS counter. If you need to see your FPS, it can be manually calculated and added to a widget. If the FPS counter is necessary, adding a delay before running the command can help. A 5-second delay has been tested and found effective, whereas shorter delays may not work.</p><p>For on-screen error messages like unbuilt lighting notifications, please have the developer resolve these errors to prevent black screen issues.</p><p>For more details on the impact of the FPS counter, please refer to the &quot;Jittery Experience&quot; section below.</p><h3 id="jittery-experience">Jittery Experience</h3><p>To improve your experience, ensure that nothing is printed on the VR screen. A common cause of jitterness is the default UE FPS display being turned on. Disabling this display can help resolve the issue.</p><h3 id="jagged-edges">Jagged Edges</h3><p>If you notice that the edges of meshes appear jagged, especially when objects are far away or viewed at an angle, it might be due to Anti-Aliasing being turned off. To improve the appearance, you can enable Anti-Aliasing by going to <code>Project Settings</code>, <code>Engine -&gt; Rendering -&gt; Default Settings -&gt; Anti-Aliasing Method</code>.</p><p><strong>Important: &#xA0;</strong>If you choose the <code>Multisample Anti-Aliasing (MSAA)</code> method, you will also need to enable &#xA0;<code>Forward Shading</code>. This setting can be found under &#xA0;<code>Engine -&gt; Rendering -&gt; Forward Renderer -&gt; Forward Shading</code>.</p><p>For more information, please refer to the <a rel="noreferrer">Anti-Aliasing and Upscaling in Unreal Engine</a> section of the Unreal Engine documentation.</p><h3 id="low-resolution-issues">Low Resolution Issues</h3><p>If your models appear to be in low resolution, it might be due to the <code>Default Screen Percentage</code> being set too low. You can find and adjust this setting by going to <code>Project Settings</code>, <code>Engine -&gt; Rendering -&gt; Default Screen Percentage</code>.</p><p>We recommend setting the <code>Manual Screen Percentage</code> to <code>100</code> and the <code>Screen Percentage Mode for Desktop renderer</code> to <code>Manual</code>. You can increase the <code>Manual Screen Percentage</code> &#xA0;to values like <code>110</code> or <code>120</code> for better resolution, but please note that this may impact performance and streaming quality.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image-1.png" class="kg-image" alt loading="lazy" width="686" height="165" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-1.png 600w, https://developer.pureweb.io/content/images/2024/06/image-1.png 686w"></figure><p><strong>Note: </strong>Additionally, be mindful that adding too many post-process effects can also negatively affect the visual quality.</p><h3 id="fps-issues">FPS Issues</h3><p>If you are experiencing low FPS, here are some steps you can take to improve performance:</p><ul><li><strong>Reduce Post-Processing Effects:</strong> Post-processing effects can be GPU intensive, especially in VR. Removing or minimizing these effects can help improve FPS.</li><li><strong>Switch to Forward Rendering:</strong> You can change the rendering system to forward rendering by going to <code>Project Settings</code>, <code>Engine -&gt; Rendering -&gt; Forward Renderer -&gt; Forward Shading</code>.</li><li><strong>Change Lighting Settings:</strong> Switching your lighting from from <code>stationary</code><strong> </strong>to <code>static</code> can also help enhance performance.</li></ul><p>These adjustments can help optimize your experience and improve FPS.</p><h3 id="controller-beamlines-not-showing">Controller Beam/Lines Not Showing</h3><p>When setting up VR projects, you may encounter two types of pointer lines that are displayed though the VR controllers:</p><ol><li><strong>Debugging Lines: </strong>These lines show where the hands/controllers are pointing and are typically in red color.</li><li><strong>Purpose-Built Pointers:</strong> These lines are designed for user control, often used for player movement or interactions.</li></ol><p>If you see the red bug controller beam lines when launching your VR project and don&apos;t want to see them, it is likely because the project is built in debug mode. Rebuilding the project in shipping mode will remove the red bug lines and fix the issue.</p><p>If the purpose-built pointer lines are not appearing as they should, but they do show up in the editor, it could be due to improper implementation or missing files in the build process. A good way to confirm this is checking through a local workflow (e.g., Running Steam VR &gt; from Headset, connect via a Steam Link &gt; Starting the model on the connected machine).</p><h3 id="package-optimization">Package Optimization</h3><p>To reduce your package size, a simple method is to only include items necessary for the maps you are using.</p><p>You can do this by going into the <code>Project Settings</code> and searching for <code>package</code>. Under the &#xA0;<code>List of maps to include in a packaged build</code>, select only the maps your model runs.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image-2.png" class="kg-image" alt loading="lazy" width="1289" height="595" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-2.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/06/image-2.png 1000w, https://developer.pureweb.io/content/images/2024/06/image-2.png 1289w" sizes="(min-width: 720px) 720px"></figure><h3 id="model-is-not-launching-as-a-vr-model">Model Is Not Launching As A VR Model</h3><p>If your model is not configured to launch as a VR model, you may notice the following symptoms: </p><p>When the model is launched from the headset, the stream goes to the Grid (Steam waiting room) and never gets past this point. Usually you should see the stream at this point within 30 seconds, depending on model load time, if it is launched properly.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/06/image-9.png" class="kg-image" alt loading="lazy" width="1440" height="1440" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-9.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/06/image-9.png 1000w, https://developer.pureweb.io/content/images/2024/06/image-9.png 1440w" sizes="(min-width: 720px) 720px"><figcaption>Grid Steam Waiting Room</figcaption></figure><p></p><p>Secondly, attempting to launch a model through a local workflow (e.g., Running Steam VR &gt; from Headset, connect via a Steam Link &gt; Starting the model on the connected machine) results in a desktop view instead of a VR stream.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/06/image-10.png" class="kg-image" alt loading="lazy" width="720" height="720" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-10.png 600w, https://developer.pureweb.io/content/images/2024/06/image-10.png 720w" sizes="(min-width: 720px) 720px"><figcaption>Model Not Initialized As VR</figcaption></figure><p></p><p>To ensure your model launches correctly in VR, check the following Unreal Editor settings:</p><ul><li><strong>Set Game Mode to VR:</strong> </li></ul><p>Navigate to <strong>Edit &gt; Project Settings &gt; Maps &amp; Modes &gt; Default Game Mode &gt; </strong>select <code>VRGameMode</code></p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image-3.png" class="kg-image" alt loading="lazy" width="2000" height="615" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-3.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/06/image-3.png 1000w, https://developer.pureweb.io/content/images/size/w1600/2024/06/image-3.png 1600w, https://developer.pureweb.io/content/images/2024/06/image-3.png 2360w" sizes="(min-width: 720px) 720px"></figure><ul><li><strong>Add and Enable the OpenXR Plugin</strong>:</li></ul><p>Add the OpenXR plugin: <strong>Edit &gt; Plugins &gt; Search </strong>for <strong><code>OpenXR</code> </strong>and enable the Plugin. (Restart the Editor if prompted.)</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image-4.png" class="kg-image" alt loading="lazy" width="2000" height="560" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-4.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/06/image-4.png 1000w, https://developer.pureweb.io/content/images/size/w1600/2024/06/image-4.png 1600w, https://developer.pureweb.io/content/images/2024/06/image-4.png 2001w" sizes="(min-width: 720px) 720px"></figure><ul><li><strong>Set the Game to Start in VR:</strong></li></ul><p>Set the game to start in VR:<strong> Edit &gt; Project Settings &gt; Search</strong> for <code>start in vr</code> and enable the setting.</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image-5.png" class="kg-image" alt loading="lazy" width="1752" height="523" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-5.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/06/image-5.png 1000w, https://developer.pureweb.io/content/images/size/w1600/2024/06/image-5.png 1600w, https://developer.pureweb.io/content/images/2024/06/image-5.png 1752w" sizes="(min-width: 720px) 720px"></figure><ul><li><strong>Remove On-Screen Console Messages:</strong></li></ul><p>Ensure there are no on-screen console messages. Refer to the &quot;Black Screen&quot; section above for guidance.</p><ul><li><strong>Optional: </strong>If the model was initially started as a non-VR model, add VR content to the project:</li></ul><p>In the <strong>Content Browser, </strong>go to <strong>Add &gt; Add Feature Or Content Pack To The Project &gt; </strong>select <code>Virtual Reality</code> <strong>&gt; Add to project</strong></p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image-6.png" class="kg-image" alt loading="lazy" width="2000" height="1393" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-6.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/06/image-6.png 1000w, https://developer.pureweb.io/content/images/size/w1600/2024/06/image-6.png 1600w, https://developer.pureweb.io/content/images/2024/06/image-6.png 2394w" sizes="(min-width: 720px) 720px"></figure><p></p><h2 id="unity-cloud-xr-troubleshooting">Unity Cloud XR Troubleshooting</h2><h3 id="jittery-objects">Jittery Objects</h3><p>In some models, objects in the scene can be jittery when moving your head. We have found that objects controlled by the physics engine exhibit this behaviour when the physics engine is set to update at a lower rate than the FPS the headset receives.</p><p>In Unity the default is 50 FPS. Most sources recommend 90 FPS, but the current limitation in SteamVR is 72 FPS. Our recommendation is to update the physics engine to a range within 72-75 FPS until we can figure out how to increase this limit. (For more information on how the calculation is done <a href="https://docs.unity3d.com/2023.2/Documentation/Manual/class-TimeManager.html">click here</a>.)</p><p>It is recommended that the physics engine match or exceed the FPS rate that the headset is receiving. </p><p><strong>NOTE: </strong>Exceeding the rate by a significant amount will typically reduce the overall model performance due to unnecessary calculations, so it is recommended to only match or slightly exceed the FPS if you know the FPS will be variable.</p><p>To change this setting, in the Unity Editor, go to: Edit &gt; Project settings &gt; Time &gt; Fixed Timestep</p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image-7.png" class="kg-image" alt loading="lazy" width="1447" height="1101" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-7.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/06/image-7.png 1000w, https://developer.pureweb.io/content/images/2024/06/image-7.png 1447w" sizes="(min-width: 720px) 720px"></figure><p></p><h2 id="general-cloud-xr-troubleshooting">General Cloud XR Troubleshooting</h2><h3 id="index">Index</h3><ol><li>HMD connection sometimes doesn&apos;t connect to the model/game.</li><li>Models launched can leave a server in a bad state.</li></ol><h3 id="1-hmd-connection-sometimes-doesn%E2%80%99t-connect-to-the-modelgame">(1) HMD Connection sometimes doesn&#x2019;t connect to the model/game</h3><p>In some launches, typically less than 5%, the HMD fails to connect to the model and the client ends up in the Steam Mountain Cabin waiting room, [need screenshot]. Unfortunately the cause of this isn&#x2019;t known yet. The workaround to this is to relaunch the session.</p><h3 id="2-models-launched-can-leave-a-server-in-a-bad-state">(2) Models launched can leave a server in a bad state</h3><p>We came across this with an early version of the ford model from Imagination. When their model was launched, this error steam was thrown: <code>SteamVR failed initialization with error code VRInitError_Init_HmdNotFound: &quot;Hmd Not Found (108)&quot; Please verify SteamVR is properly installed and try again.</code></p><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/06/image-8.png" class="kg-image" alt loading="lazy" width="740" height="194" srcset="https://developer.pureweb.io/content/images/size/w600/2024/06/image-8.png 600w, https://developer.pureweb.io/content/images/2024/06/image-8.png 740w" sizes="(min-width: 720px) 720px"></figure><h2 id="additional-cloudxr-troubleshooting-guide-and-cloudxr-game-package-preparation-faq">Additional CloudXR Troubleshooting Guide and CloudXR Game Package Preparation (FAQ)</h2><h3></h3><h3 id="1-do-i-need-to-follow-the-pixelstreaming-preparation-guides-for-cloudxr-or-vr-game-packages">1. Do I need to follow the PixelStreaming preparation guides for CloudXR or VR game packages?</h3><p><br>No, for CloudXR or VR game setups, the standard PixelStreaming guides for Unity and Unreal (listed <a href="https://developer.pureweb.io/prepare-your-unreal-5-package/" rel="noopener">here for Unreal</a> and <a href="https://developer.pureweb.io/prepare-your-unity-package/" rel="noopener">here for Unity</a>) should not be followed. These setups have different requirements, particularly around handling audio and input.</p><h3 id="2-why-is-audio-not-working-in-my-unity-vr-game-with-the-purewebstreaming-script">2. Why is audio not working in my Unity VR game with the PureWebStreaming script?</h3><p><br>The issue is likely caused by a conflict between the script&#x2019;s audio listener and the main camera&#x2019;s audio listener. The PureWebStreaming script from the PureWeb Plugin is designed for PixelStreaming, which takes over the audio stream. To resolve this:</p><ul><li><strong>Solution</strong>: Remove the PureWeb Plugin and recompile the VR game. The audio should then work in the VR headset.</li></ul><h3 id="3-can-i-use-a-single-model-for-both-pixelstreaming-and-vr">3. Can I use a single model for both PixelStreaming and VR?<br></h3><p>Yes, it is technically possible to build a model that works for both PixelStreaming and VR, but it is not officially supported. Audio and other elements would require additional configuration, particularly in the plugin and game project, to function properly in both modes.</p><h3 id="4-how-should-i-prepare-separate-game-packages-for-vr">4. How should I prepare separate game packages for VR?</h3><p><br>For VR-specific packages, follow the setup guidelines from the Unity and Unreal documentation focused on VR:</p><ul><li><a href="https://docs.unity3d.com/Manual/VROverview.html" rel="noopener">Unity VR setup guide</a></li><li><a rel="noopener">Unreal VR setup documentation</a></li></ul><h3 id="5-why-does-pixelstreaming-conflict-with-vr-setups">5. Why does PixelStreaming conflict with VR setups?</h3><p><br>PixelStreaming takes control over the audio and video streams, which interferes with the functionality needed for VR. In VR, the audio and video streams are processed differently and must be directly handled by the headset. As a result, PixelStreaming should not be included in CloudXR or VR game packages.</p><h3 id="additional-tips">Additional Tips</h3><p>If you are preparing both VR and non-VR versions of your game, we recommend keeping separate builds and project folders in the console to avoid conflicts with audio and other systems.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Getting started with PureWeb Reality]]></title><description><![CDATA[Learn about project prerequisites, packaging, uploading, custom web client experiences, and more. ]]></description><link>https://developer.pureweb.io/getting-started/</link><guid isPermaLink="false">60eca18935135b0001f35b9c</guid><category><![CDATA[Getting Started]]></category><category><![CDATA[SDK]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Wed, 18 Sep 2024 16:45:00 GMT</pubDate><media:content url="https://developer.pureweb.io/content/images/2021/07/PureGuide_page_5.png" medium="image"/><content:encoded><![CDATA[<h2 id="introduction">Introduction</h2><img src="https://developer.pureweb.io/content/images/2021/07/PureGuide_page_5.png" alt="Getting started with PureWeb Reality"><p>Before you dive in, take a look at the <a href="https://developer.pureweb.io/pureweb-reality-overview/">PureWeb Reality Overview</a>.</p><h2 id="technical-skills-hardware-required">Technical Skills &amp; Hardware Required</h2><p>We recommend a level of familiarity with the following:</p><ul><li>HTML/CSS</li><li>Node.js - JavaScript runtime for building scalable network applications</li><li>React &#xA0;- JavaScript library for building user interfaces</li><li>Unity or Unreal</li></ul><p>To take advantage of our local development workflow and testing tools your PC needs to be capable of running your 3D project locally and fulfill its minimum requirements in terms of CPU, RAM, GPU and disk space. </p><h2 id="packaging-streaming-your-experience">Packaging &amp; Streaming Your Experience</h2><p>Whether you are building your experience in Unity or Unreal, we&apos;ve got you covered. Follow the steps below to get up and running quickly.</p><h3 id="prepare-your-package">Prepare Your Package</h3><p>Click the image below for full details on preparing your project for streaming on the PureWeb Reality platform.</p><!--kg-card-begin: html--><table>
    <tr>
        <td>
            <a href="https://developer.pureweb.io/prepare-your-unreal-5-package/">
                <img src="https://developer.pureweb.io/content/images/2021/07/Unreal_275x100.png" alt="Getting started with PureWeb Reality">
            </a>
        </td>
        <td>
            <a href="https://developer.pureweb.io/prepare-your-unity-package/">
                <img src="https://developer.pureweb.io/content/images/2021/07/Unity_275x100.png" alt="Getting started with PureWeb Reality">
            </a>
        </td>
    </tr>
    <tr>
        <td>Prepare Your Unreal Project</td>
        <td>Prepare Your Unity Project</td>
    </tr>
</table><!--kg-card-end: html--><h3 id="test-and-upload">Test and Upload</h3><p>With a project that&apos;s ready to go, or you&apos;re developing a custom client (see below), you may want <a href="https://developer.pureweb.io/test-streaming-locally/">Test Streaming Locally</a> before you <a href="https://developer.pureweb.io/upload-and-test-in-the-cloud">Upload &amp; Test Your Package in the Cloud</a>.</p><h2 id="custom-web-client">Custom Web Client</h2><p>After your 3D project is in the cloud you need to <a href="https://developer.pureweb.io/create-a-web-client/">Create a Web Client</a>. With a custom web client you&#x2019;ll be able to customize the user experience to perfectly fit the needs of your project. Create a fully custom, immersive end-user experience!</p><p>The PureWeb SDK enables you to create web integrations with your 3D project. This ranges from a simple branded web client, to fully custom end-user experiences.</p><h3 id="web-client">Web Client</h3><p>To create a <strong><strong>custom web client experience</strong></strong>, start by downloading the <a href="https://www.npmjs.com/package/@pureweb/cra-template-pureweb-client">PureWeb React web client template from NPM</a>.</p><p>Follow the instructions detailed in <a href="https://developer.pureweb.io/create-a-web-client/">Create a web client</a> to get connected to your model and start customizing the web client.</p><p>Once you&apos;ve been up and running for a while, you may need to <a href="https://developer.pureweb.io/update-webclient-sdk/">Update your web client to a newer version of the SDK</a>.</p><p><em>Full SDK <a href="https://pureweb.github.io/platform-sdk-js/">documentation can be found here</a>.</em></p><h3 id="streaming-agent">Streaming Agent</h3><p>Need to quickly iterate on your model and web client? For this use case, PureWeb also supports a <strong><strong>development workflow</strong></strong> where you can run your 3D experience locally on your development machine.</p><p>Start by downloading the <a href="https://www.npmjs.com/package/@pureweb/platform-streaming-agent">PureWeb Streaming Agent from NPM</a> and follow the instructions detailed in <a href="https://developer.pureweb.io/test-streaming-locally">Test streaming your package locally</a>.</p><h2 id="troubleshooting-optimization">Troubleshooting &amp; Optimization</h2><ul><li><a href="https://developer.pureweb.io/optimize-my-project/">Game Optimization Tips</a></li><li><a href="https://developer.pureweb.io/performance-impacts/">What Impacts Game Performance?</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Routing Audio in a Streaming Unity Experience]]></title><description><![CDATA[<p>Our platform sends audio over webRTC from the AudioListener, so if the audio is output some other way, the stream will not receive them. To ensure that the audio from videos in the game is included in the WebRTC audio stream, make sure the audio output from the videos is</p>]]></description><link>https://developer.pureweb.io/routing-unity-audio/</link><guid isPermaLink="false">66799bef25003b00016bbe2c</guid><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Tue, 10 Sep 2024 19:59:14 GMT</pubDate><content:encoded><![CDATA[<p>Our platform sends audio over webRTC from the AudioListener, so if the audio is output some other way, the stream will not receive them. To ensure that the audio from videos in the game is included in the WebRTC audio stream, make sure the audio output from the videos is routed through the AudioListener used for the WebRTC audio track. </p><p>To achieve this:</p><ol><li>Add an AudioSource for the Video - Ensure each video has an AudioSource component attached. This component should play the video&apos;s audio.</li><li>Route the AudioSource to the AudioListener - Ensure the AudioSource components are routed through the AudioListener used in the WebRTC setup.</li></ol><p>Please see sample code below to help get you started:</p><pre><code class="language-C#">using UnityEngine;
using UnityEngine.Video;

public class VideoAudioSetup : MonoBehaviour
{
	public VideoPlayer videoPlayer;
    private AudioSource audioSource;
    
    void Start()
    {
    	audioSource = gameObject.AddComponent&lt;AudioSource&gt;();
        videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
        videoPlayer.SetTargetAudioSource(0, audioSource);
    }
}</code></pre>]]></content:encoded></item><item><title><![CDATA[Release Notes]]></title><description><![CDATA[<p></p><h2 id="feb-27-2024">Feb 27, 2024</h2><p></p><h3 id="instance-on-feature-and-launch-time-improvements">Instance-On Feature and Launch Time Improvements</h3><p><br>In our latest release, we&#x2019;ve made significant improvements to launch times with our new Instance-On feature. This release introduces two key changes aimed at reducing launch times: Pre-Launch and Reserved Streams.</p><h3 id="pre-launch">Pre-Launch</h3><p><br>With <strong>Pre-Launch</strong>, we&apos;ve moved the</p>]]></description><link>https://developer.pureweb.io/release-notes/</link><guid isPermaLink="false">622f4957c5c66f0001df8173</guid><category><![CDATA[Release Notes]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Thu, 05 Sep 2024 17:00:00 GMT</pubDate><content:encoded><![CDATA[<p></p><h2 id="feb-27-2024">Feb 27, 2024</h2><p></p><h3 id="instance-on-feature-and-launch-time-improvements">Instance-On Feature and Launch Time Improvements</h3><p><br>In our latest release, we&#x2019;ve made significant improvements to launch times with our new Instance-On feature. This release introduces two key changes aimed at reducing launch times: Pre-Launch and Reserved Streams.</p><h3 id="pre-launch">Pre-Launch</h3><p><br>With <strong>Pre-Launch</strong>, we&apos;ve moved the bulk of the discovery and connection process to occur during the initial launch, shifted away from when the user clicks the play button. This change aims to have most (if not all) of the connection process done before the user is ready to start the connection. As a result, the first-frame time can potentially be reduced to just a few seconds, depending on the current client workflow and existing model load times.</p><h3 id="reserved-streams">Reserved Streams</h3><p><br>The second feature, <strong>Reserved Streams</strong>, allows customers to configure a model to automatically start on a server, wait in a ready state, and connect once the client is ready. This eliminates the need to wait for the model to start before the connection can occur. Documentation regarding this feature can be <a href="https://developer.pureweb.io/reserved-streams-a-k-a-instant-on/">found here</a></p><h3 id="expected-launch-time-improvements">Expected Launch Time Improvements</h3><p><br>By utilizing the <strong>Pre-Launch</strong> feature, launch times will be significantly reduced. When both <strong>Pre-Launch</strong> and <strong>Reserved Streams</strong> are used together, we are targeting a typical launch time of about 2 seconds.</p><h3 id="seamless-developer-integration">Seamless Developer Integration</h3><p><br>The secondary goal of this release was to ensure that these changes are as seamless as possible for developers. A new SDK version must be implemented in your client, <a href="https://developer.pureweb.io/upgrade-existing-client/">upgrade notes can be found here</a>. To take advantage of the <strong>Pre-Launch</strong> feature, simply uncomment the new call <a href="https://developer.pureweb.io/pre-launch-sdk-workflow/">Described here</a>.<br>Model changes are only required if you have content that auto-plays on start. In that case, you will need to set up a pause until an on-client-connect event occurs before that content begins.</p><h2 id="oct-30-2024">Oct 30, 2024</h2><h3 id="summary">Summary</h3><p><br>In this release we&#x2019;ve significantly upgraded the computing power of all of our AWS-based on-demand servers. Previously we relied on an Nvidia T4 GPU, but as graphical workloads have gotten more demanding, we felt it was time to upgrade the default GPU in our pools, migrating to an A10G GPU. While there are more powerful GPUs available, in our testing and profiling we&#x2019;ve found the A10G to be an appropriate entry point, which offers a bit of headroom for models that may not fully utilize everything this GPU has to offer.</p><p><br>We&#x2019;ve done extensive performance profiling on this GPUs, and the results point to significant improvements in frame rates. On average we saw an 80% improvement in streaming framerate compared to a T4 equipped compute instance. However, for the most demanding workloads in our test bench, we saw improvements in excess of 300% in FPS.</p><p><br>In addition to improvements in framerate, these instances also deliver a slightly better time to first frame (i.e. launch time), with the average coming in around 15% faster, than the same models running on a T4 based instance. Additionally, due to shifts in platform load over the last year, we&#x2019;ve decided to migrate the Mumbai pool to Dubai, as this should provide better connectivity for a greater portion of our user base. This change will have rolled out automatically and transparently, and every project configured to use the PureWeb on-demand provider will be able to take advantage of the change immediately, with no changes needed in your project or model configuration.</p><h2 id="oct-11-2024">Oct 11, 2024</h2><h3 id="summary-1">Summary</h3><p><br>This week we released a number of small improvements and updates across the entire platform.</p><p><strong>Unreal 5.4</strong><br>While we had unofficial Unreal 5.4 support for users of our dedicated providers for a couple of months now, we now have official 5.4 support for all provider types in PureWeb (dedicated and on-demand).<br>There are no breaking changes to either the setup workflow or the plugin if you&#x2019;re using Unreal 5.4. The latest version of the PureWeb plugin built for Unreal 5.4 can be found in our <a href="https://developer.pureweb.io/prepare-your-unreal-5-package/" rel="noopener noreferrer">getting started guide</a>.<br>Keeping with our engine version support matrix, Unreal 5.2 is now deprecated. While 5.2 models may continue to run successfully for some time, it is no longer part of our testing matrix. Additionally, Unreal 5.3 will now only receive platform support, not plugin and SDK support. For more information please see our <a href="https://developer.pureweb.io/deprecation-policy/" rel="noopener noreferrer">deprecation policy</a>.</p><p><strong>SDK - Precaching Latency Check</strong><br>When you trigger a launch request, the first thing our SDK does is test the user&apos;s network latency to all of our possible server endpoints. This process takes between 0.7 and 2 seconds. We have a number of use cases where an interactive stream doesn&#x2019;t start immediately when a user navigates to a page, but instead is started in response to some user interaction on that page. An example of this might be a architectural configurator where a user loads a configuration page, but then can toggle to pixel streamed view vs 2D images. In these situations, there are some necessary platform connection activities that can be done in advance of the user launching a stream. By performing these activities when the page loads, you can reduce the perceived time-to-first-frame for your users. To this end, we have now implemented a new <code>await platform.getLatencyMeasurements();</code> call in our SDK. This call can be made immediately after your call to <code>platform.connect();</code>, which can happen any time before the user action triggers a <code>queueLaunchRequest();</code>. Version 4.10.2 of our SDK was released today with this change, and it can be downloaded on NPM here: <a href="https://www.npmjs.com/package/@pureweb/platform-sdk/v/4.10.2" rel="noopener noreferrer">npm: @pureweb/platform-sdk</a> .</p><p><strong>CoreWeave Nvidia Driver</strong><br>The Nvidia driver on our CoreWeave On-demand provider has been upgraded to 552.55.</p><p><strong>Stability</strong><br>A number of stability improvements were made this week, particularly with respect to CloudXR streaming processes and model availability on our on-demand CoreWeave providers. If you have any questions on anything above, please reach out on Discord or at <a href="mailto:support@pureweb.com" rel="noopener noreferrer">support@pureweb.com</a>. And happy streaming!</p><h2 id="oct-1-2024">Oct 1, 2024</h2><h3 id="summary-2">Summary</h3><p>This release update pulls together a number of updates across various parts of PureWeb Reality which have been updated in the last couple of weeks.</p><p><strong>New CloudXR Client</strong><br>We have released an updated set of CloudXR clients, which can be downloaded <a href="https://pureweb-na.s3.amazonaws.com/nightlies/CloudXR/CXR-Clients-U7.4.2-A2.01.9.zip" rel="noopener noreferrer">here</a>. &#xA0;This package includes version 7.4.2 of the PureWeb Platform CloudXR client, and version 2.1.9 of the PureWeb Android Streamer Client. &#xA0;For the time being, we are continuing to focus on the 2-client approach for CloudXR, as we&#x2019;ve found that this provides the most sustainable path for development, while maintaining the best possible streaming performance. &#xA0;Specific updates to these clients include:</p><ul><li>Added a refresh button so you if you upload new VR models to the PureWeb platform while the VR client is open, you don&#x2019;t have to exit / restart your client to see your newly uploaded model.</li><li>Improved error handling for a variety of workflows, including platform connectivity, configuration json file errors, and token errors.</li><li>Added support for local game development, similar to our local workflow for web streaming projects. &#xA0;Instructions on how to use the local development workflow for CloudXR, <a href="https://developer.pureweb.io/cloudxr-local-workflow/" rel="noopener noreferrer">check out this link</a>.</li></ul><p><strong>Other improvements</strong></p><ul><li>We &#xA0;added support to the UAE region of AWS as an option for dedicated providers. To make use of this region, you&#x2019;ll need to be using version 4.10.0 of the PureWeb platform SDK, or newer.</li><li>A number of UI polish improvements on the newly updated PureWeb Reality console.</li><li>Security improvements around token checking.</li><li>Platform stability improvements around model availability accuracy.</li></ul><h2 id="sept-6-2024">Sept 6, 2024</h2><h3 id="summary-3">Summary</h3><p>Today we have released an update to the dependencies in our AWS based on-demand environment. Specifically:</p><ul><li>The Nvidia driver has been updated to 552.55</li><li>Updated the MS VC redistributable to the latest version</li></ul><p>Regarding the Nvidia driver, we want to share some insights into how we choose what version to upgrade to. Having over a decade of working with cloud GPUs, we&#x2019;ve learned that the newest Nvidia driver is rarely the best for our platform / use case. Frequently new driver versions introduce compatibility issues with either the underlying infrastructure, or specific visualization libraries like video encoders or rendering libraries (ex. DLSS). In many cases we&#x2019;ve tested new driver versions that have seriously degraded rendering performance on on either our on-demand or dedicated system or both. We put a lot of attention and testing into jumping driver versions to ensure that the version we pick is universally compatible across all our provider types, and doesn&#x2019;t negatively impact any of the workloads that run on our platform.</p><p>For reference, our AWS dedicated servers are also using v552.55 of the Nvidia driver. Our CoreWeave based infrastructure will be updated in the coming weeks.</p><p>If you have any questions about this update, please drop us a line in discord, or reach out to <a href="mailto:support@pureweb.com" rel="noopener noreferrer">support@pureweb.com</a>.</p><p>Happy Streaming!</p><h2 id="sept-5-2024">Sept 5, 2024</h2><h3 id="summary-4">Summary</h3><p>Today we&#x2019;re releasing some quality of life and stability improvements in the our SDK artifacts (platform-sdk, admin-sdk, and streaming agent).</p><ul><li>In the admin SDK package (<a href="https://www.npmjs.com/package/@pureweb/platform-admin-sdk" rel="noopener noreferrer">npm: @pureweb/platform-admin-sdk</a>), the <code>authenticate()</code> method, now includes an optional Boolean parameter to tell the SDK whether or not the access token should be automatically refreshed. &#xA0;The default value for this parameter is <code>true</code>. &#xA0;In the same vein, we&#x2019;ve also added a new method called <code>stopAuthenticateRefresh()</code>. This new method allows you have the client access token automatically refreshed until the time of your choosing. &#xA0;This will give you finer grained control of managing your access tokens when designing a custom auth solution. More on custom auth can be found <a href="https://developer.pureweb.io/simple-authentication-in-your-web-client/" rel="noopener noreferrer">here</a>.</li><li>In the platform SDK package (<a href="https://www.npmjs.com/package/@pureweb/platform-sdk" rel="noopener noreferrer">npm: @pureweb/platform-sdk</a> ), we fixed a defect wherein the WebRTC peer connection was not properly closed after verifying client side codec support.</li></ul><h3 id="streamer-reset">Streamer Reset</h3><p>Additionally, in the platform SDK we&#x2019;ve implemented new <code>resetLaunchRequest()</code> and <code>resetStreamer()</code> methods. These will allow you to completely terminate a stream from within your client application, and reset the client application state so you can launch a fresh stream. Previously, you had to refresh your web client to launch a new stream. Now if your workflow requires it, you can terminate and re-launch fresh streams from within the same active page without introducing any memory leaks. </p><p>To implement this workflow in your client:</p><p>In your App.tsx, retrieve the extra reset arguments from the launch request and streamer hooks:</p><pre><code class="language-javascript">const [status, launchRequest, queueLaunchRequest, resetLaunchRequest] = useLaunchRequest(
   platform,
   modelDefinition,
   launchRequestOptions
);
const [streamerStatus, emitter, videoStream, audioStream, messageSubject, resetStreamer] = useStreamer(
   platform,
   launchRequest,
   streamerOptions
);</code></pre><p>In the launch view, you&#x2019;ll also want to intercept the streamer status to reset the launch view:</p><pre><code class="language-javascript">if (streamerStatus === StreamerStatus.Completed) { return ; }</code></pre><p>Implement your <code>onClose</code> function:</p><pre><code class="language-javascript">onClose={async () =&gt; { 
    if (launchRequest) { 
        await launchRequest.close(platform);
        // Reset the hooks
        resetLaunchRequest(); 
        resetStreamer(); 
        // Reset loading state
        setLoading(false); 
    } 
}}</code></pre><p>Call your new <code>onClose</code> function from wherever you want in your client app.</p><p>To see a full implementation of these new APIs in action, we&#x2019;ve also added a new disconnection button into the client template (<a href="https://www.npmjs.com/package/@pureweb/cra-template-pureweb-client" rel="noopener noreferrer">npm: @pureweb/cra-template-pureweb-client</a>) where you can see the code for yourself.</p><h3 id="default-stream-time-limit">Default Stream Time Limit</h3><p>Finally, we introduced a new default stream time limit into the platform via the Streaming Agent (<a href="https://www.npmjs.com/package/@pureweb/platform-streaming-agent" rel="noopener noreferrer">npm: @pureweb/platform-streaming-agent</a>). This is to help combat the rare instances of sessions that keep running or fail to clean up correctly.</p><p>The default time limit is 8 hours. If you&#x2019;re developing locally using the Streaming Agent, this can be configured either as an argument <code>--maximumRuntime</code> or environment variable <code>PUREWEB_MAXIMUM_RUNTIME</code>. The value is passed in seconds.</p><p>If the Streaming Agent terminates due to exceeding the configured maximum runtime, you it will return error code <code>ErrorMaximumRuntimeReached (12)</code>.</p><p>All of these changes are available in version <strong>v4.9.0</strong> of the PureWeb SDK bundle.</p><p>Check it out on NPM &amp; happy streaming!</p><h2 id="aug-29-2024">Aug 29, 2024</h2><h3 id="summary-5">Summary</h3><p>Today the PureWeb console is getting a major UI overhaul. Our old console UI served us very well for a few years, but we&#x2019;ve got some big plans for new console features coming down the pipe, and they need a new home.</p><p>Our main goal with this UI overhaul was to more readily surface valuable information that was previously buried in various menus and modal dialog boxes, and in general, reduce the amount of clicking needed to move around between different models, projects, and other settings.</p><p>Some of the new quality of life changes that we&#x2019;ve added include:</p><ul><li>Dark mode! Click on your account icon in the top right corner, and select &#x2018;theme&#x2019; to toggle modes.</li><li>The home screen now shows all of your available projects along with how those projects are configured (on-demand or dedicated), how many models they contain, and also whether they are Reality projects (i.e. web streaming) or Extended Reality projects (i.e. VR streaming).</li><li>If you have a large number of projects, the left hand bar now includes a project search function.</li><li>The notification icon in the top right corner is now much more informative, also giving you the ability to filter previously read messages.</li><li>We now have a brand new dedicated model page for each model, where you can see and change model settings, and preview your model.</li></ul><p>This is just the first step in a series of exciting console updates you&#x2019;ll be seeing from us, so stay tuned, and as always, happy streaming!</p><h2 id="aug-26-2024">Aug 26, 2024</h2><h3 id="summary-6">Summary</h3><p>We&#x2019;re excited to announce that as of today&#x2019;s release, PureWeb Extended Reality, our new VR streaming solution, is now globally available through our dedicated infrastructure providers on AWS.</p><p>Running PureWeb Extended Reality on dedicated infrastructure will give you all the same benefits that you&#x2019;d see for Pixel Streaming or Render Streaming workloads:</p><ul><li>Pick from many area including United States, Australia, UAE, Brazil, Ireland, Germany, England, Japan, India, and Canada.</li><li>Faster time to first frame</li><li>Fully customizable scaling and scheduling behavior</li><li>Ability to reserve infrastructure capacity</li></ul><p>Please reach out to <a href="mailto:support@pureweb.io" rel="noopener noreferrer">support@pureweb.io</a> or your PureWeb account rep to get started. If you&#x2019;re already using PureWeb XR, you&#x2019;ll need to update your client applications, which can be found here: <a href="https://developer.pureweb.io/metaquest3-cloudxr-setup/" rel="noopener noreferrer">https://developer.pureweb.io/metaquest3-cloudxr-setup/</a></p><h3 id="other-updates">Other Updates</h3><p>Since our last update, we also made an improvement in our global routing system to more quickly respond to load increases in certain regions and route around any temporary capacity crunches. This should mean less time queueing for a stream. As is the norm, we also made a number of routine security and availability / stabilization improvements.</p><h2 id="aug-14-2024">Aug 14, 2024</h2><p>While we have been a bit quiet on the release notes front, rest assured that we&#x2019;ve been hard at work improving and expanding PureWeb Reality over the last several months. With a major release landing this week, we wanted to highlight these recent changes.</p><h3 id="cloudxr-support">CloudXR Support</h3><p>First and foremost, we&#x2019;re excited to announce that PureWeb now supports VR streaming through Nvidia&#x2019;s <a href="https://www.nvidia.com/en-us/design-visualization/solutions/cloud-xr/" rel="noopener noreferrer">CloudXR</a>. Work began on this capability in January, and we have been in closed beta since March, and as of today we&#x2019;re thrilled to announce that the offering is now generally available. This capability will allow you to run graphically intense VR workloads on the cloud, and interactively stream that content to a lightweight all-in-one headset over the internet.</p><p>Here are the quick facts:</p><ul><li>As of today, we support the <strong>Meta Quest 2 / 3 &amp; Pro</strong> headsets. If you are interested in using a different headset, please reach out, as we intend to expand our headset support over time, and we&#x2019;d love to hear about your use case.</li><li>VR Streaming is supported for both <strong>Unreal </strong>and <strong>Unity </strong>models. The currently supported versions of <a href="https://developer.pureweb.io/supported-unreal-versions/" rel="noopener noreferrer">Unreal </a>and <a href="https://developer.pureweb.io/supported-unity-versions/" rel="noopener noreferrer">Unity </a>are still valid.</li><li>All workloads currently run on our <strong>North American based On-demand providers</strong>. We will be adding support for our international Dedicated providers in the next two to three weeks. International support for our On-demand providers will be coming at a later date.</li><li>We have a ready-to-use lightweight preview client that can be used to consume your VR streams. This client is easily configurable to either directly launch a VR stream, or browser and launch multiple different VR streams within a given project on the PureWeb platform. We will be releasing a customizable client template later this year which will allow you to build a completely bespoke client experience in Unity.</li><li>VR Streaming is offered a separate license from our existing web-streaming offering. If you&#x2019;re an existing customer, please reach out to your account manager to learn more about this offering and get set up with access. If you&#x2019;re not a customer, and interested in learning more, please <a href="https://www.pureweb.com/get-in-touch/" rel="noopener noreferrer">get in touch</a>.</li></ul><p>To learn more about what to expect when using CloudXR on PureWeb Reality, you can check out our <a href="https://developer.pureweb.io/metaquest3-cloudxr-setup/" rel="noopener noreferrer">Meta Quest - Getting Started Guide</a>.</p><h3 id="streamer-ip-address-retention">Streamer IP Address Retention</h3><p>When negotiating a PureWeb stream, historically, we retained the IP address of the end user in our internal logs for debugging and troubleshooting purposes. However, in an effort to further improve our privacy stance, and only retain the information that is strictly necessary for the operation of the PureWeb platform, all end user IP address information is now anonymized before being written to our logging aggregator.</p><p>If you have any questions about what data we do retain, and how we use it, please see this <a href="https://www.pureweb.com/news-updates/from-the-pureweb-privacy-desk-your-data-our-commitment/" rel="noopener noreferrer">post</a>.</p><h3 id="unreal-microphone-support">Unreal Microphone Support</h3><p>As of v4.7.4 of the <a href="https://www.npmjs.com/package/@pureweb/platform-sdk" rel="noopener noreferrer">PureWeb Platform SDK,</a> it is now possible to send web browser microphone inputs to your Unreal application. For more information on how to configure your web client and Unreal application to capture this audio stream, please check out this <a href="https://developer.pureweb.io/stream-audio-into-unreal/" rel="noopener noreferrer">dev hub article</a>.</p><h3 id="routine-security-updates">Routine Security Updates</h3><p>As always, we&#x2019;ve been working hard to ensure that all of the software we use in the development of our platform is as secure and performant as possible. As such we&#x2019;ve also used several releases over recent months to roll out major updates to key dependencies across our software stack. These updates should be entirely transparent to users.</p><h2 id="jan-26-2024">Jan 26, 2024</h2><h3 id="summary-7">Summary</h3><p><strong>2FA</strong><br>Today, we&#x2019;re improving the way you secure access to your PureWeb account, by providing optional two-factor authentication (2FA) for console users.<br>When you log into the console for the first time, you&#x2019;ll be prompted to turn on 2FA for your account. Using 2FA is completely optional, but it is an excellent way to improve the security of your account.<br>For more information on enabling 2FA, please see this article: <a href="https://developer.pureweb.io/enabling-console-mfa/" rel="noopener noreferrer">https://developer.pureweb.io/enabling-console-mfa/</a>. &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; </p><p>If you want to disable 2FA, the instructions can be found in this article: <a href="https://developer.pureweb.io/disabling-console-mfa/" rel="noopener noreferrer">https://developer.pureweb.io/disabling-console-mfa/</a></p><p><strong>CoreWeave Security Improvements</strong><br>We have also released a collection of changes to further improve data security within our CoreWeave based providers. These changes should be completely transparent to end users.</p><h2 id="jan-18-2024">Jan 18, 2024</h2><h3 id="summary-8">Summary</h3><p>Today we&#x2019;re excited to release an entirely new class of on-demand infrastructure in the PureWeb platform. Taking advantage of the top tier rendering GPUs available in CoreWeave, we are introducing a new High Performance on-demand provider. These new providers, which are available today in both the Western and Eastern United States, are equipped with Nvidia&#x2019;s powerful RTX A6000 GPUs, 32 GB of RAM, and 10 vCPUs. Capable of powering your most demanding Unreal and Unity streaming projects.</p><p>We ran these new providers through their paces with some GPU melting workloads, and we found that our testbench of Unreal applications saw framerate improvements that ranged from 28% to 67%, and our Unity testbench saw improvements ranging from 35% to 48%, when compared to our existing CoreWeave providers.</p><p>We also benchmarked against our Nvidia A10G-based dedicated providers, and found that frame rates of the high-performance CoreWeave providers saw improvements ranging from 20% to 132%, depending on the what was being rendered. Depending on the performance characteristics of your model, it can be possible to run these new on-demand providers in a hybrid configuration with a dedicated provider running A10G powered instances for better global reach.</p><p>If you&#x2019;re interested in trying out these new providers, please reach out to your customer success manager, or email <a href="mailto:support@pureweb.com" rel="noopener noreferrer">support@pureweb.com</a>.</p><h3 id="other-releases">Other releases</h3><p>We have also released a patch to our Unity plugin (v.3.0.9) available here: <a href="https://pureweb-na.s3.amazonaws.com/nightlies/PixelStreaming/com.pureweb.platform-3.0.9.tgz" rel="noopener noreferrer">https://pureweb-na.s3.amazonaws.com/nightlies/PixelStreaming/com.pureweb.platform-3.0.9.tgz</a>.</p><p>This version fixes an issue where touch events from mobile devices were causing a persistent hover effect on UI elements.</p><h3 id="finally-a-note-about-release-notes">Finally, a note about release notes</h3><p>Over the last year, we&#x2019;ve rapidly sped up our release cadence. Part of this was done through breaking work down in to smaller releasable units. Due if this, we would often end up publish release notes two or three times a week. Starting in 2024, we&#x2019;re going to switch to publishing release notes approximately every two weeks. so we can bundle all these updates together, so you&#x2019;re not inundated with release messaging.</p><h2 id="previous-release-notes">Previous Release Notes</h2><ul><li><a href="https://developer.pureweb.io/release-notes-2023/">Release Notes - 2023</a></li><li><a href="https://developer.pureweb.io/release-notes-2022/">Release Notes - 2022</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Cloud XR Client Parameters]]></title><description><![CDATA[<p>PureWeb&apos;s Unity CloudXR client supports secure and anonymous projects, and allows launching individual models or models from the list.</p><p>The client.json configuration file supports the following settings:</p><h3 id="projectid">projectId</h3><p>A projectId must always be specified unless an overrideIP is used.</p><h3 id="modelid">modelId</h3><p>If the modelId parameter is included in</p>]]></description><link>https://developer.pureweb.io/cloud-xr-client-parameters/</link><guid isPermaLink="false">66aab768707d7d0001b3a246</guid><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Fri, 23 Aug 2024 22:24:32 GMT</pubDate><content:encoded><![CDATA[<p>PureWeb&apos;s Unity CloudXR client supports secure and anonymous projects, and allows launching individual models or models from the list.</p><p>The client.json configuration file supports the following settings:</p><h3 id="projectid">projectId</h3><p>A projectId must always be specified unless an overrideIP is used.</p><h3 id="modelid">modelId</h3><p>If the modelId parameter is included in the configuration file, that specific model will be launched automatically. If omitted, the client will present a list of models in the specified project. The user can select one of these to launch.</p><h3 id="endpoint">endpoint</h3><p>The endpoint overrides the default <a href="https://api.pureweb.io/">https://api.pureweb.io</a>.</p><h3 id="nativeclient">nativeClient</h3><p>If nativeClient is omitted, the default NVIDIA CXR client will stream the game.</p><h3 id="overrideip">overrideIP</h3><p>If overrideIP is specified, the Unity CloudXR client will directly connect to that IP.</p><h3 id="launchurl">launchURL</h3><p>If launchURL is specified, it will be used to launch a specific model. The projectId must match the model for which the URL was generated. You can generate a shared URL in the model card in our console.</p><h3 id="projecttoken">projectToken</h3><p>projectToken is used for secure projects. You can generate the token using our CLI or extract it from the shared URL. Note that tokens from shared URLs are valid for 7 days, whereas CLI-generated tokens are valid for 24 hours.</p>]]></content:encoded></item><item><title><![CDATA[Enabling On-Screen Touch Controllers for Mobile Browsers in Unreal Engine]]></title><description><![CDATA[<h3></h3><h3 id="overview">Overview</h3><p>When streaming from Unreal (or Unity) on our platform detecting the type of device consuming the pixel stream needs to be done on the client side in the web browser.</p><ol><li>Detect the client device type using JavaScript.</li><li>Send the device information to Unreal using the data channel.</li><li>Process the</li></ol>]]></description><link>https://developer.pureweb.io/ue-mobile-joystick-controllers/</link><guid isPermaLink="false">668ee9eb707d7d0001b39efe</guid><category><![CDATA[UE - Unreal Engine]]></category><category><![CDATA[Web Client]]></category><category><![CDATA[Mobile]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Thu, 22 Aug 2024 14:44:09 GMT</pubDate><content:encoded><![CDATA[<h3></h3><h3 id="overview">Overview</h3><p>When streaming from Unreal (or Unity) on our platform detecting the type of device consuming the pixel stream needs to be done on the client side in the web browser.</p><ol><li>Detect the client device type using JavaScript.</li><li>Send the device information to Unreal using the data channel.</li><li>Process the received device information in Unreal and enable or disable the virtual joystick accordingly.</li><li>Enable native touch events for a smoother experience on mobile devices.</li></ol><p>Following these steps will help you enable the on-screen touch controllers for mobile browsers while keeping them disabled for desktop browsers.</p><h3 id="detecting-the-client-device">Detecting the Client Device</h3><p>The first step is to determine whether the client device is a mobile device or a desktop. You can achieve this using various methods in JavaScript. For instance, you can follow the approaches outlined in this <a href="https://medium.com/geekculture/detecting-mobile-vs-desktop-browsers-in-javascript-ad46e8d23ce5" rel="noreferrer">Medium article</a>. These methods generally involve checking the user agent string of the browser to identify the device type.</p><pre><code class="language-javascript">function isMobile() {
    return /Mobi|Android/i.test(navigator.userAgent);
}</code></pre><h3 id="sending-device-information-to-the-unreal-application">Sending Device Information to the Unreal Application</h3><p>Once you have the type of client device, you need to send this information to your Unreal application. This can be done using the data channel. Detailed instructions for this process are available in the PureWeb documentation <a href="https://developer.pureweb.io/process-web-client-message-in-ue/">here</a>.</p><pre><code class="language-javascript">let deviceType = isMobile() ? &apos;mobile&apos; : &apos;desktop&apos;;
dataChannel.send(JSON.stringify({ type: &apos;DeviceType&apos;, device: deviceType }));</code></pre><h3 id="handling-device-information-in-unreal">Handling Device Information in Unreal</h3><p>On the Unreal side, you need to process the received message and enable or disable the virtual joystick based on device type.</p><pre><code class="language-C++">void AYourPlayerController::ProcessWebClientMessage(const FString&amp; Message)
{
    TSharedPtr&lt;FJsonObject&gt; JsonObject;
    TSharedRef&lt;TJsonReader&lt;&gt;&gt; Reader = TJsonReaderFactory&lt;&gt;::Create(Message);

    if (FJsonSerializer::Deserialize(Reader, JsonObject))
    {
        FString MessageType = JsonObject-&gt;GetStringField(&quot;type&quot;);

        if (MessageType == &quot;DeviceType&quot;)
        {
            FString DeviceType = JsonObject-&gt;GetStringField(&quot;device&quot;);

            if (DeviceType == &quot;mobile&quot;)
            {
                // Enable virtual joystick
                bEnableVirtualJoystick = true;
                EnableNativeTouchEvents();
            }
            else
            {
                // Disable virtual joystick
                bEnableVirtualJoystick = false;
            }
        }
    }
}
</code></pre><h3 id="enabling-native-touch-events">Enabling Native Touch Events</h3><p>When using the on-screen joystick for mobile devices, it&apos;s recommended to enable native touch events for smoother interactivity. You can enable native touch events in Unreal by setting the appropriate flags or configuration in your project settings.</p><pre><code class="language-C++">void AYourPlayerController::EnableNativeTouchEvents()
{
    // Code to enable native touch events
}
</code></pre><p>By following the steps above, you can effectively enable on-screen touch controllers for mobile browsers while keeping them disabled for desktop browsers. This approach ensures that the user experience is optimized for each device type.</p>]]></content:encoded></item><item><title><![CDATA[Understanding Launch Status and Message Timing]]></title><description><![CDATA[<h3></h3><h2 id="introduction">Introduction</h2><p>When working with the PureWeb Reality streaming platform, particularly with custom web client, developers often encounter issues related to <a href="https://developer.pureweb.io/display-launch-statuses-web-client/">status messages</a> and correct timing of sending messages between the game and web client.</p><p>A common problem is the failure to receive the &quot;serviced&quot; status, with the logging</p>]]></description><link>https://developer.pureweb.io/launch-status-message-timing/</link><guid isPermaLink="false">667de23025003b00016bc0df</guid><category><![CDATA[Web Client]]></category><category><![CDATA[UE - Unreal Engine]]></category><category><![CDATA[Unity]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Thu, 01 Aug 2024 21:12:04 GMT</pubDate><content:encoded><![CDATA[<h3></h3><h2 id="introduction">Introduction</h2><p>When working with the PureWeb Reality streaming platform, particularly with custom web client, developers often encounter issues related to <a href="https://developer.pureweb.io/display-launch-statuses-web-client/">status messages</a> and correct timing of sending messages between the game and web client.</p><p>A common problem is the failure to receive the &quot;serviced&quot; status, with the logging stopping at the &quot;ready&quot; state. This guide aims to provide practical solutions to ensure smooth communication between the game and the web client.</p><h2 id="status-messages-in-pureweb-streaming">Status Messages in PureWeb Streaming</h2><p>PureWeb&apos;s platform provides various status messages to indicate the connection and readiness states of the platform and the stream. These statuses are crucial for understanding the current state of the application and the streaming process. However, it is important to note that these status messages do not convey the readiness status of the game itself. This distinction is vital for troubleshooting.</p><h3 id="key-status-messages">Key Status Messages</h3><ol><li><strong>Ready</strong>: Indicates that the application is ready but does not guarantee that the game and web client are fully ready to communicate.</li><li><strong>Serviced</strong>: Indicates that the web client has successfully connected and is receiving service.</li></ol><h3 id="timing-challenges-in-message-communication">Timing Challenges in Message Communication</h3><p>One of the most challenging aspects of using PureWeb Streaming is ensuring the correct timing of initial messages between the game and the web client. If either side sends a message before the other is ready, the message will essentially be lost. This timing issue is a common reason for not receiving the &quot;serviced&quot; status.</p><h3 id="example-scenarios">Example Scenarios</h3><ul><li><strong>Game Sends Message Prematurely</strong>: If the game sends a message before the stream has fully connected, the web client will not receive it, causing the status to remain at &quot;ready.&quot;</li><li><strong>Web Client Sends Message Prematurely</strong>: Similarly, if the web client sends a message while the game is still loading assets or starting up, the game may not be ready to process it, leading to missed communication.</li></ul><h2 id="practical-solution-delaying-game-initialization">Practical Solution: Delaying Game Initialization</h2><p>To address the timing issue, introducing a delay before the game starts sending messages can be an effective solution. This ensures that both the game and the web client are fully ready to communicate. Below is a sample implementation for Unity that demonstrates how to introduce a delay on startup.</p><h3 id="unity-code-example">Unity Code Example</h3><pre><code class="language-C#">public class GameManager : MonoBehaviour
{
	public GameObject objectToLoad; // Assign your prefab here in the Inspector   

	void Start()
	{
    // Use a condition or a delay to control when to load your GameObject
    Invoke(&quot;LoadObject&quot;, 5); // Call LoadObject method after 5 seconds
	}

	void LoadObject()
	{
    	Instantiate(objectToLoad);
	}
}    </code></pre><p>In this example, the <code>Invoke</code> method is used to delay the loading of the game object by 5 seconds. This delay ensures that the game is ready before it attempts to send any messages to the web client.</p><h2 id="conclusion">Conclusion</h2><p>Understanding the status messages and timing issues in PureWeb Streaming is crucial for ensuring smooth communication between the game and the web client. By recognizing the importance of synchronization and implementing practical solutions such as introducing delays, developers can prevent common issues like missing the &quot;serviced&quot; status. This guide serves as a resource for troubleshooting and resolving these issues, ensuring a more reliable streaming experience with PureWeb.</p>]]></content:encoded></item><item><title><![CDATA[Custom Web Client Inactivity Duration]]></title><description><![CDATA[<p>When the user of a streaming session is inactive, we recommend terminating the session after issuing a warning to the user.</p><p>Our web client template provides some default checks to ensure that a stream is not kept active indefinitely and disconnected if the user becomes inactive.</p><p> You can adjust these</p>]]></description><link>https://developer.pureweb.io/web-client-inactivity/</link><guid isPermaLink="false">646266fc0aa1c3000135c0e1</guid><category><![CDATA[Web Client]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Thu, 01 Aug 2024 16:00:00 GMT</pubDate><content:encoded><![CDATA[<p>When the user of a streaming session is inactive, we recommend terminating the session after issuing a warning to the user.</p><p>Our web client template provides some default checks to ensure that a stream is not kept active indefinitely and disconnected if the user becomes inactive.</p><p> You can adjust these values as needed to suit the needs of your streaming experience.</p><ul><li><strong>WarningThreshold</strong> - when this duration is reached, a warning will pop up to ask the user if they&apos;re still there.</li><li><strong>ExitThreshold</strong> - is how long it will wait after the warning threshold is reached. If there is no activity the stream will disconnect. </li></ul><p>These values can be found in your web client template&apos;s App.tsx file, in the IdleTimeout section (around line 165).</p><p>The values are in seconds (ex: 300s is the equivalent of 5 minutes).</p>]]></content:encoded></item><item><title><![CDATA[CloudXR Local Workflow]]></title><description><![CDATA[<p>To ensure your CloudXR models are functioning correctly, you can test them locally by connecting your headset directly to your editor. </p><p>Note that this method does not fully replicate a CloudXR connection on the PureWeb Reality Platform, and might not replicate all issues you may encounter in building, packaging and</p>]]></description><link>https://developer.pureweb.io/cloudxr-local-workflow/</link><guid isPermaLink="false">66904770707d7d0001b39f95</guid><category><![CDATA[CloudXR]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Wed, 17 Jul 2024 19:40:37 GMT</pubDate><content:encoded><![CDATA[<p>To ensure your CloudXR models are functioning correctly, you can test them locally by connecting your headset directly to your editor. </p><p>Note that this method does not fully replicate a CloudXR connection on the PureWeb Reality Platform, and might not replicate all issues you may encounter in building, packaging and deployment.</p><p>To identify problems early, use this workflow only after your model is packaged and ready to be deployed, or for troubleshooting if a cloud-hosted model is not working after initial deployment.</p><h2 id="local-workflow">Local Workflow</h2><h3 id="environment-configuration">Environment Configuration</h3><p>Before starting please ensure your local environment is set up as follows:</p><ul><li>A supported VR headset (Meta Quest 2/3/Pro)</li><li>A PC with a GPU capable of running the application (Nvidia A6000 or A10G equivalent recommended) </li><li>The PC has the <a href="https://store.steampowered.com/about/" rel="noreferrer">Steam Client</a> installed</li><li>Both the headset and PC must be connected on the same network (with firewall exceptions opened if necessary)</li><li>Your VR model packaged correctly</li><li>(Optional) PureWeb clients side-loaded on the headset</li></ul><h3 id="install-steamvr">Install SteamVR</h3><p>Download and install the <em>SteamVR</em> application to your <em>Steam Client Library</em>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/07/DownloadSteamVR.png" class="kg-image" alt loading="lazy" width="1663" height="553" srcset="https://developer.pureweb.io/content/images/size/w600/2024/07/DownloadSteamVR.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/07/DownloadSteamVR.png 1000w, https://developer.pureweb.io/content/images/size/w1600/2024/07/DownloadSteamVR.png 1600w, https://developer.pureweb.io/content/images/2024/07/DownloadSteamVR.png 1663w" sizes="(min-width: 720px) 720px"><figcaption>SteamVR</figcaption></figure><p>Launch the <em>SteamVR </em>application.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/07/RunSteamVR.png" class="kg-image" alt loading="lazy" width="1368" height="725" srcset="https://developer.pureweb.io/content/images/size/w600/2024/07/RunSteamVR.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/07/RunSteamVR.png 1000w, https://developer.pureweb.io/content/images/2024/07/RunSteamVR.png 1368w" sizes="(min-width: 720px) 720px"><figcaption>Run SteamVR</figcaption></figure><p>Add your model as a <em>Non-Steam Game </em>in the <em>Steam client </em>by left-clicking on<em> Add a game &gt; Browse to location</em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/07/AddNon-SteamGame.png" class="kg-image" alt loading="lazy" width="498" height="257"><figcaption>Add Non-Steam Game</figcaption></figure><p>Now navigate to the location of your package VR model&apos;s main executable and select it, then click &quot;Add Selected Programs.&quot;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/07/AddNon-SteamGameSelection.png" class="kg-image" alt loading="lazy" width="1225" height="560" srcset="https://developer.pureweb.io/content/images/size/w600/2024/07/AddNon-SteamGameSelection.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/07/AddNon-SteamGameSelection.png 1000w, https://developer.pureweb.io/content/images/2024/07/AddNon-SteamGameSelection.png 1225w" sizes="(min-width: 720px) 720px"><figcaption>Add Non-Steam Game Selection</figcaption></figure><h2 id="connecting-to-the-game">Connecting to the Game</h2><h3 id="without-the-pureweb-clients"><em>Without </em>the PureWeb clients</h3><p>If you want to connect without the PureWeb clients to test the model or don&apos;t have the optional clients setup on the headset:</p><p>Connect the headset to <em>SteamVR</em> through <em>Steam Link </em>(<em>Steam Link </em>should be installed by default, if not you can download it from the store).</p><p>From the headset <em>Library, </em>under <em>All</em> apps select <em>Steam Link, </em>which should find the PC that has <em>SteamVR</em> running.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/07/SteamLink.jpg" class="kg-image" alt loading="lazy" width="1440" height="1440" srcset="https://developer.pureweb.io/content/images/size/w600/2024/07/SteamLink.jpg 600w, https://developer.pureweb.io/content/images/size/w1000/2024/07/SteamLink.jpg 1000w, https://developer.pureweb.io/content/images/2024/07/SteamLink.jpg 1440w" sizes="(min-width: 720px) 720px"><figcaption>Steam Link App</figcaption></figure><p>Click &quot;Connect&quot; to connect to your PC.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/07/SteamLinkConnection.jpg" class="kg-image" alt loading="lazy" width="1440" height="1440" srcset="https://developer.pureweb.io/content/images/size/w600/2024/07/SteamLinkConnection.jpg 600w, https://developer.pureweb.io/content/images/size/w1000/2024/07/SteamLinkConnection.jpg 1000w, https://developer.pureweb.io/content/images/2024/07/SteamLinkConnection.jpg 1440w" sizes="(min-width: 720px) 720px"><figcaption>Steam Link Connection</figcaption></figure><p>Now you should load into the <em>Grid </em>&quot;Steam waiting room&quot; <br>(<em>Note: </em>This view is configurable and may look different if it has been updated.)</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://developer.pureweb.io/content/images/2024/07/Grid-Steam-Waiting-room.jpg" class="kg-image" alt loading="lazy" width="1440" height="1440" srcset="https://developer.pureweb.io/content/images/size/w600/2024/07/Grid-Steam-Waiting-room.jpg 600w, https://developer.pureweb.io/content/images/size/w1000/2024/07/Grid-Steam-Waiting-room.jpg 1000w, https://developer.pureweb.io/content/images/2024/07/Grid-Steam-Waiting-room.jpg 1440w" sizes="(min-width: 720px) 720px"><figcaption>Grid Steam Waiting Room</figcaption></figure><h3 id="with-the-pureweb-clients"><em>With</em> the PureWeb clients</h3><p>If you want to connect with the PureWeb clients to test the model on the headset:</p><ul><li>In the <em>client.json </em>file add a new property:<br><code>&quot;overrideIP&quot;: &quot;[IP_Address_Of_Your_PC]&quot;</code> </li><li>Copy this file to the headset similar to the step described in the <a href="https://developer.pureweb.io/metaquest3-cloudxr-setup/#configure-the-client">Configure the Client</a> during Setting up your MetaQuest3 with PureWeb CloudXR Client.</li></ul><p>When the overrideIP parameter is included, the client will ignore other parameters and launch directly to this IP address, so be sure to remove or adjust it when reconnecting to the platform to avoid connectivity issues.</p><ul><li>Launch the client from your headset as you normally would.</li><li>In the <em>Steam client, </em>run the model you added earlier from <em>Steam Library .</em></li></ul><figure class="kg-card kg-image-card"><img src="https://developer.pureweb.io/content/images/2024/07/RunModel.png" class="kg-image" alt loading="lazy" width="2000" height="988" srcset="https://developer.pureweb.io/content/images/size/w600/2024/07/RunModel.png 600w, https://developer.pureweb.io/content/images/size/w1000/2024/07/RunModel.png 1000w, https://developer.pureweb.io/content/images/size/w1600/2024/07/RunModel.png 1600w, https://developer.pureweb.io/content/images/2024/07/RunModel.png 2166w" sizes="(min-width: 720px) 720px"></figure><p>At this point, your model should either connect or display issues related to the model, build or packaging process. Common issues might include:</p><ul><li>No video stream (black screen)</li><li>The model displaying in a large desktop view.</li><li>Steam errors due to incorrectd model configuration with OpenXR.</li><li>The client failing to connect and reverting to the horizon OS bar.</li></ul><p>Should you encounter any of the above, please refer to our <a href="https://developer.pureweb.io/ue-cxr-troubleshooting-guide/">CXR troubleshooting guide</a>.</p>]]></content:encoded></item><item><title><![CDATA[Using the PureWeb SDK with a Next.js Custom Web Client]]></title><description><![CDATA[<h2 id="introduction">Introduction</h2><p>Although we provide a comprehensive <a href="https://developer.pureweb.io/create-a-web-client/">ReactJS template</a> for building out a custom web client, you may want to use something different such as Next.js.</p><h2 id="nodejs-nextjs">Node.js &amp; Next.js</h2><p>When integrating the PureWeb SDK with a Next.js project, you may encounter issues with certain Node.js modules</p>]]></description><link>https://developer.pureweb.io/node-js-custom-client/</link><guid isPermaLink="false">668447fd25003b00016bc151</guid><category><![CDATA[Web Client]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Wed, 17 Jul 2024 19:40:05 GMT</pubDate><content:encoded><![CDATA[<h2 id="introduction">Introduction</h2><p>Although we provide a comprehensive <a href="https://developer.pureweb.io/create-a-web-client/">ReactJS template</a> for building out a custom web client, you may want to use something different such as Next.js.</p><h2 id="nodejs-nextjs">Node.js &amp; Next.js</h2><p>When integrating the PureWeb SDK with a Next.js project, you may encounter issues with certain Node.js modules that aren&apos;t intended for front-end use. This article documents a real-world scenario and explains how to resolve such issues, ensuring a smoother integration process.</p><p><em><strong>NOTE: </strong>Whether using our React.js template or porting over to a more custom solution such as this, once you begin customizing your web client the responsibility for hosting, maintaining, supporting and testing it is that of the license-holder.</em></p><p>When porting from the React-based project into a Next.js environment you may encounter compiler errors related to Node.js-specific modules (<code>tls</code> and &#xA0;<code>fs</code> ). These modules are required by the PureWeb SDK but are only meant for server-side use and not for the browser. See below for examples</p><p><strong>Module Not Found Error</strong></p><ul><li>Error: <code>Module not found: Can&apos;t resolve &apos;tls&apos;</code></li><li>Cause: Next.js tried to include the <code>tls</code> module, which is not available in the browser environment.</li></ul><p><strong>File System Module Error</strong></p><ul><li>Error: <code>Module not found: Can&apos;t resolve &apos;fs&apos;</code></li><li>Cause: Similar to <code>tls</code>, the <code>fs</code> module is also specific to Node.js and not available in the browser.</li></ul><p>These errors typically arise because Next.js, by default, may attempt to bundle these Node.js modules into the client-side code.</p><p><strong>Solution</strong></p><p>To resolve these issues, we need to adjust the Webpack configuration in the Next.js project to exclude these Node.js modules from the client-side bundle.</p><h2 id="step-by-step-guide">Step-by-step guide</h2><h3 id="modify-the-nextjs-webpack-configuration">Modify the Next.js Webpack Configuration</h3><p>Open your Next.js configuration file (<code>next.config.js</code>) and add a custom Webpack configuration to handle the module resolution issue.</p><pre><code class="language-javascript">next.config.jsmodule.exports = { 
    webpack(config) {
        config.resolve.fallback = { 
            // Preserve existing fallbacks
            config.resolve.fallback, 
            // Add fallbacks for problematic modules      
            fs: false, tls: false, }; 
        return config; }, };</code></pre><ul><li><strong><code>config.resolve.fallback</code></strong>: This Webpack option allows you to specify fallbacks for modules that cannot be resolved. By setting <code>fs</code> and <code>tls</code> to <code>false</code>, you&apos;re instructing Webpack to ignore these modules in the client-side bundle.</li></ul><p>This configuration effectively silences the errors caused by these modules and allows your Next.js application to build and run without issues.</p><h3 id="testing-the-configuration">Testing the Configuration</h3><p>After making the above changes:</p><ol><li>Rebuild your Next.js project,</li><li>Ensure that the application builds successfully without the previous module errors,</li><li>Verify that the PureWeb SDK functions as expected in the browser environment.</li></ol><h2 id="additional-tips">Additional Tips</h2><ul><li><strong>Check Dependencies</strong>: Ensure that other dependencies in your project do not also try to include Node.js-specific modules. Apply similar fallbacks as needed.</li><li><strong>Environment-specific code</strong>: Use environment checks to conditionally import or use modules that are specific to the server-side, ensuring they are not included in the client bundle.</li></ul><pre><code class="language-javascript">if (typeof window === &apos;undefined&apos;) { 
    // Code here runs only on the server  
    const someServerSideOnlyModule = require(&apos;some-server-side-only-module&apos;);
}</code></pre><h2 id="conclusion">Conclusion</h2><p>By configuring Webpack to handle Node.js-specific modules properly, you can successfully integrate the PureWeb SDK into your Next.js application without encountering build errors. This approach ensures a seamless transition from a standard React environment to Next.js, leveraging the server-side rendering capabilities while avoiding client-side issues.</p><p>This solution will help developers avoid similar issues in the future, providing a smoother development experience when working with Next.js and PureWeb SDK.</p>]]></content:encoded></item><item><title><![CDATA[PureWeb Reality Overview]]></title><description><![CDATA[The PureWeb Reality platform gives you the ability to stream real-time 3D content for digital twins, product configuration, training simulation, events and other dynamic applications.]]></description><link>https://developer.pureweb.io/pureweb-reality-overview/</link><guid isPermaLink="false">60f2047335135b0001f36193</guid><category><![CDATA[Getting Started]]></category><dc:creator><![CDATA[PureWeb]]></dc:creator><pubDate>Wed, 10 Jul 2024 18:45:00 GMT</pubDate><content:encoded><![CDATA[<p>The PureWeb Reality platform gives you the ability to stream real-time 3D content for digital twins, product configuration, training simulation, events and other dynamic applications. This rich content is accessible on any modern web browser from your laptop, phone or tablet; there&apos;s no need for the end user to download or install anything!</p><h3 id="what-do-you-need">What do you need?</h3><ul><li>a 3D game package developed in Unity or Unreal</li><li>a deployed web client</li></ul><h3 id="how-does-it-work">How does it work?</h3><p>The PureWeb Reality platform is a fully managed provider of interactive metaverse experiences. &#xA0;You provide the 3D model, and the Reality platform handles infrastructure management, model deployment, global routing &amp; load balancing, scheduling and much more.</p><p>Following <a href="https://developer.pureweb.io/upload-and-test-your-project-in-the-cloud/">upload through our Console</a>, your 3D game package is directly fed into our deployment pipeline. The first time you upload a model, our team will rapidly prepare your streaming infrastructure. Following the initial set up, you can update your model through the console at any time.</p><p>Finally, your users will connect to your game package using a web client. Our platform provides a default preview client for rapid feedback and testing. For production deployment, we provide a <a href="https://developer.pureweb.io/create-a-web-client/">web client template</a> that can be configured in seconds.</p><p>Once deployed, the web client seamlessly handles coordination of streaming session connections, region selection, queuing and more to ensure the fastest time from request to delivery of a stream in the user&apos;s web browser.</p><p>In short:</p><ol><li>You upload your prepared 3D game package through the <a href="console.pureweb.io">PureWeb Reality console</a>.</li><li>Optionally create and deploy a <a href="https://developer.pureweb.io/create-a-web-client/">custom web client</a> to your desired hosting service.</li><li>Users can begin streaming from their web browser on their device of choice through your custom client or our <a href="https://developer.pureweb.io/embed-preview-client/">preview client</a>.</li></ol><h3 id="scheduling-auto-scaling">Scheduling &amp; Auto-Scaling</h3><p>For timebound events with a large number of users, you&apos;ll want to discuss reserving server capacity with your sales representative ahead of time. The PureWeb Reality platform can dynamically scale the number of servers up (or down) over time to adjust to user demand during your event.</p><h3 id="what-next">What Next?</h3><p>Head back to our <a href="https://developer.pureweb.io/getting-started/">Getting started with PureWeb Reality</a> guide!</p>]]></content:encoded></item></channel></rss>