VR Tunnelling Pro UE4
Plug-and-Play VR Comfort
VRTP.h
1 #pragma once
2 
3 #include "CoreMinimal.h"
4 #include "UObject/ObjectMacros.h"
5 #include "Engine/TextureCube.h"
6 #include "Components/PrimitiveComponent.h"
7 #include "SceneViewExtension.h"
8 #include "IMotionController.h"
9 #include "LateUpdateManager.h"
10 #include "IIdentifiableXRDevice.h" // for FXRDeviceId
11 #include "Components/ActorComponent.h"
12 #include "Components/SceneCaptureComponentCube.h"
13 #include "Engine/TextureRenderTargetCube.h"
14 #include "Engine/DataAsset.h"
15 #include "VRTP.generated.h"
16 
18 UENUM(BlueprintType)
19 enum class EVRTPBackgroundMode : uint8
20 {
21  MM_COLOR UMETA(DisplayName = "Color"),
22  MM_SKYBOX UMETA(DisplayName = "Skybox"),
23  MM_BLUR UMETA(DisplayName = "Blur")
24 };
25 
27 UENUM(BlueprintType)
28 enum class EVRTPMaskMode : uint8
29 {
30  MM_OFF UMETA(DisplayName = "Off"),
31  MM_MASK UMETA(DisplayName = "Mask"),
32  MM_WINDOW UMETA(DisplayName = "Window"),
33  MM_PORTAL UMETA(DisplayName = "Portal")
34 };
35 
37 USTRUCT(BlueprintType)
39 {
40  GENERATED_USTRUCT_BODY()
41 
42 
43  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Capture")
44  TSubclassOf<class AActor> SkyboxBlueprint;
45 
47  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Capture")
48  UTextureCube* CubeMapOverride;
49 
51  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Post Process")
52  UMaterial* PostProcessMaterial;
53 
55  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effect Settings")
56  FLinearColor EffectColor;
57 
59  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effect Settings", meta = (ClampMin = "0.0", ClampMax = "1.0"))
60  float EffectCoverage;
61 
63  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effect Settings", meta = (ClampMin = "0.0", ClampMax = "10.0"))
64  float EffectFeather;
65 
67  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effect Settings")
68  EVRTPBackgroundMode BackgroundMode;
69 
71  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effect Settings")
72  bool ApplyEffectColor;
73 
75  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effect Settings")
76  bool ForceEffect;
77 
79  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effect Settings|Mask Settings")
80  EVRTPMaskMode MaskMode;
81 
83  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effect Settings|Mask Settings", meta = (ClampMin = "0", ClampMax = "255"))
84  int32 StencilIndex;
85 
87  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Direction specific")
88  bool bDirectionSpecific;
89 
91  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Direction specific")
92  float DirectionalVerticalStrength;
93 
95  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Direction specific")
96  float DirectionalHorizontalStrength;
97 
99  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Angular Velocity")
100  bool bUseAngularVelocity;
101 
103  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Angular Velocity", meta = (ClampMin = "0.0", ClampMax = "10.0"))
104  float AngularStrength;
105 
107  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Angular Velocity", meta = (ClampMin = "0.0", ClampMax = "180.0"))
108  float AngularMin;
109 
111  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Angular Velocity", meta = (ClampMin = "0.0", ClampMax = "180.0"))
112  float AngularMax;
113 
115  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Angular Velocity", meta = (ClampMin = "0.0", ClampMax = "1.0"))
116  float AngularSmoothing;
117 
119  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Velocity")
120  bool bUseVelocity;
121 
123  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Velocity", meta = (ClampMin = "0.0", ClampMax = "10.0"))
124  float VelocityStrength;
125 
127  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Velocity", meta = (ClampMin = "0.0", ClampMax = "1000.0"))
128  float VelocityMin;
129 
131  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Velocity", meta = (ClampMin = "0.0", ClampMax = "1000.0"))
132  float VelocityMax;
133 
135  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Velocity", meta = (ClampMin = "0.0", ClampMax = "1.0"))
136  float VelocitySmoothing;
137 
139  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Acceleration")
140  bool bUseAcceleration;
141 
143  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Acceleration", meta = (ClampMin = "0.0", ClampMax = "10.0"))
144  float AccelerationStrength;
145 
147  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Acceleration", meta = (ClampMin = "0.0", ClampMax = "1000.0"))
148  float AccelerationMin;
149 
151  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Acceleration", meta = (ClampMin = "0.0", ClampMax = "1000.0"))
152  float AccelerationMax;
153 
155  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Motion Settings|Acceleration", meta = (ClampMin = "0.0", ClampMax = "1.0"))
156  float AccelerationSmoothing;
157 
158  FVRTPPreset()
159  {
160  SkyboxBlueprint = NULL;
161  CubeMapOverride = NULL;
162  PostProcessMaterial = NULL;
163  EffectColor = FLinearColor::Black;
164  EffectCoverage = 0;
165  EffectFeather = 0;
166  BackgroundMode = EVRTPBackgroundMode::MM_COLOR;
167  ApplyEffectColor = false;
168  ForceEffect = false;
169  MaskMode = EVRTPMaskMode::MM_OFF;
170  StencilIndex = 200;
171  bDirectionSpecific = false;
172  DirectionalVerticalStrength = 1.5f;
173  DirectionalHorizontalStrength = 1.5f;
174  bUseAngularVelocity = false;
175  AngularStrength = 0;
176  AngularMin = 0;
177  AngularMax = 0;
178  AngularSmoothing = 0;
179  bUseVelocity = false;
180  VelocityStrength = 0;
181  VelocityMin = 0;
182  VelocityMax = 0;
183  VelocitySmoothing = 0;
184  bUseAcceleration = false;
185  AccelerationStrength = 0;
186  AccelerationMin = 0;
187  AccelerationMax = 0;
188  AccelerationSmoothing = 0;
189  }
190 };
191 
193 UCLASS()
194 class UVRTPPresetData : public UDataAsset
195 {
196  GENERATED_BODY()
197 
198 public:
200  UPROPERTY(EditAnywhere)
202 };
203 
204 class FPrimitiveSceneInfo;
205 class FRHICommandListImmediate;
206 class FSceneView;
207 class FSceneViewFamily;
208 
210 UCLASS(Blueprintable, meta = (BlueprintSpawnableComponent), ClassGroup = MotionController, HideCategories = ("VRTunnellingPro"))
211 class UVRTunnellingPro : public UPrimitiveComponent
212 {
213  GENERATED_UCLASS_BODY()
214 
215 public:
216  virtual void BeginPlay() override;
217  void BeginDestroy() override;
218 
220  UPROPERTY(BlueprintReadWrite, BlueprintSetter = SetAssociatedPlayerIndex, Category = "VR Tunnelling | MotionController")
221  int32 PlayerIndex;
222 
223  UPROPERTY(BlueprintSetter = SetTrackingSource, BlueprintGetter = GetTrackingSource, Category = "VR Tunnelling | MotionController")
224  EControllerHand Hand_DEPRECATED;
225 
227  UPROPERTY(BlueprintReadWrite, BlueprintSetter = SetTrackingMotionSource, Category = "VR Tunnelling | MotionController")
228  FName MotionSource;
229 
231  UPROPERTY(BlueprintReadWrite, Category = "VR Tunnelling | MotionController")
232  uint32 bDisableLowLatencyUpdate : 1;
233 
235  UPROPERTY(BlueprintReadOnly, Category = "VR Tunnelling | MotionController")
236  ETrackingStatus CurrentTrackingStatus;
237 
238  void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
239 
240  UFUNCTION(BlueprintPure, Category = "MotionController") bool IsTracked() const
241  {
242  return bTracked;
243  }
244 
245  UFUNCTION(BlueprintSetter, meta = (DeprecatedFunction, DeprecationMessage = "Please use the Motion Source property instead of Hand"))
246  void SetTrackingSource(const EControllerHand NewSource);
247 
248  UFUNCTION(BlueprintGetter, meta = (DeprecatedFunction, DeprecationMessage = "Please use the Motion Source property instead of Hand"))
249  EControllerHand GetTrackingSource() const;
250 
251  UFUNCTION(BlueprintSetter)
252  void SetTrackingMotionSource(const FName NewSource);
253 
254  UFUNCTION(BlueprintSetter)
255  void SetAssociatedPlayerIndex(const int32 NewPlayer);
256 
258  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VR Tunnelling|Effect Preset")
260 
262  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VR Tunnelling|Effect Preset")
263  bool bEnablePreset;
264 
266  UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "VR Tunnelling")
267  TSubclassOf<class AActor> SkyboxBlueprint;
268  UPROPERTY(EditAnywhere)
269  TSubclassOf<class AActor> SkyboxBlueprintSwap;
270 
272  UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "VR Tunnelling")
273  UTextureCube* CubeMapOverride;
274  UPROPERTY(EditAnywhere)
275  UTextureCube* CubeMapOverrideSwap;
276 
278  UPROPERTY(EditAnywhere, BlueprintReadWrite, AdvancedDisplay, Category = "VR Tunnelling")
279  UMaterial* PostProcessMaterial;
280  UPROPERTY(EditAnywhere)
281  UMaterial* PostProcessMaterialSwap;
282 
284  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Effect Settings")
285  FLinearColor EffectColor;
286  UPROPERTY(EditAnywhere)
287  FLinearColor EffectColorSwap;
288 
290  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Effect Settings", meta = (ClampMin = "0.0", ClampMax = "1.0"))
291  float EffectCoverage;
292  UPROPERTY(EditAnywhere)
293  float EffectCoverageSwap;
294 
296  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Effect Settings", meta = (ClampMin = "0.0", ClampMax = "10.0"))
297  float EffectFeather;
298  UPROPERTY(EditAnywhere)
299  float EffectFeatherSwap;
300 
302  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Effect Settings")
303  EVRTPBackgroundMode BackgroundMode;
304  UPROPERTY(EditAnywhere)
305  EVRTPBackgroundMode BackgroundModeSwap;
306 
308  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Effect Settings")
309  bool ApplyEffectColor;
310  UPROPERTY(EditAnywhere)
311  bool ApplyEffectColorSwap;
312 
314  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Effect Settings")
315  bool ForceEffect;
316  UPROPERTY(EditAnywhere)
317  bool ForceEffectSwap;
318 
320  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Effect Settings|Mask Settings")
321  EVRTPMaskMode MaskMode;
322  UPROPERTY(EditAnywhere)
323  EVRTPMaskMode MaskModeSwap;
324 
326  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Effect Settings|Mask Settings", meta = (ClampMin = "0", ClampMax = "255"))
327  int32 StencilIndex;
328  UPROPERTY(EditAnywhere)
329  int32 StencilIndexSwap;
330 
332  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Direction Specific")
333  bool bDirectionSpecific;
334  UPROPERTY(EditAnywhere)
335  bool bDirectionSpecificSwap;
336 
338  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Direction Specific")
339  float DirectionalVerticalStrength;
340  UPROPERTY(EditAnywhere)
341  float DirectionalVerticalStrengthSwap;
342 
344  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Direction Specific")
345  float DirectionalHorizontalStrength;
346  UPROPERTY(EditAnywhere)
347  float DirectionalHorizontalStrengthSwap;
348 
350  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Angular Velocity")
351  bool bUseAngularVelocity;
352  UPROPERTY(EditAnywhere)
353  bool bUseAngularVelocitySwap;
354 
356  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Angular Velocity", meta = (ClampMin = "0.0", ClampMax = "10.0"))
357  float AngularStrength;
358  UPROPERTY(EditAnywhere)
359  float AngularStrengthSwap;
360 
362  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Angular Velocity", meta = (ClampMin = "0.0", ClampMax = "180.0"))
363  float AngularMin;
364  UPROPERTY(EditAnywhere)
365  float AngularMinSwap;
366 
368  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Angular Velocity", meta = (ClampMin = "0.0", ClampMax = "180.0"))
369  float AngularMax;
370  UPROPERTY(EditAnywhere)
371  float AngularMaxSwap;
372 
374  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Angular Velocity", meta = (ClampMin = "0.0", ClampMax = "1.0"))
375  float AngularSmoothing;
376  UPROPERTY(EditAnywhere)
377  float AngularSmoothingSwap;
378 
380  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Velocity")
381  bool bUseVelocity;
382  UPROPERTY(EditAnywhere)
383  bool bUseVelocitySwap;
384 
386  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Velocity", meta = (ClampMin = "0.0", ClampMax = "10.0"))
387  float VelocityStrength;
388  UPROPERTY(EditAnywhere)
389  float VelocityStrengthSwap;
390 
392  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Velocity", meta = (ClampMin = "0.0", ClampMax = "1000.0"))
393  float VelocityMin;
394  UPROPERTY(EditAnywhere)
395  float VelocityMinSwap;
396 
398  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Velocity", meta = (ClampMin = "0.0", ClampMax = "1000.0"))
399  float VelocityMax;
400  UPROPERTY(EditAnywhere)
401  float VelocityMaxSwap;
402 
404  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Velocity", meta = (ClampMin = "0.0", ClampMax = "1.0"))
405  float VelocitySmoothing;
406  UPROPERTY(EditAnywhere)
407  float VelocitySmoothingSwap;
408 
410  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Acceleration")
411  bool bUseAcceleration;
412  UPROPERTY(EditAnywhere)
413  bool bUseAccelerationSwap;
414 
416  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Acceleration", meta = (ClampMin = "0.0", ClampMax = "10.0"))
417  float AccelerationStrength;
418  UPROPERTY(EditAnywhere)
419  float AccelerationStrengthSwap;
420 
422  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Acceleration", meta = (ClampMin = "0.0", ClampMax = "1000.0"))
423  float AccelerationMin;
424  UPROPERTY(EditAnywhere)
425  float AccelerationMinSwap;
426 
428  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Acceleration", meta = (ClampMin = "0.0", ClampMax = "1000.0"))
429  float AccelerationMax;
430  UPROPERTY(EditAnywhere)
431  float AccelerationMaxSwap;
432 
434  UPROPERTY(EditAnywhere, BlueprintReadWrite, SimpleDisplay, Category = "VR Tunnelling|Motion Settings|Acceleration", meta = (ClampMin = "0.0", ClampMax = "1.0"))
435  float AccelerationSmoothing;
436  UPROPERTY(EditAnywhere)
437  float AccelerationSmoothingSwap;
438 
439 private:
440  USceneCaptureComponentCube* SceneCaptureCube;
441  UTextureRenderTargetCube* TC;
442  float HFov;
443  float VFov;
444  UMaterialInstanceDynamic* PostProcessMID;
445  AActor* Skybox;
446  bool CaptureInit;
447 
448 public:
450  UFUNCTION(BlueprintCallable, Category = "VR Tunnelling")
451  void ApplyPreset(UVRTPPresetData* NewPreset);
452 
454  UFUNCTION(BlueprintCallable, Category = "VR Tunnelling")
455  void SetBackgroundMode(EVRTPBackgroundMode NewBackgroundMode);
456 
458  UFUNCTION(BlueprintCallable, Category = "VR Tunnelling")
459  void SetMaskMode(EVRTPMaskMode NewMaskMode);
460 
462  UFUNCTION(BlueprintCallable, Category = "VR Tunnelling")
463  void SetEffectColor(FLinearColor NewColor);
464 
466  UFUNCTION(BlueprintCallable, Category = "VR Tunnelling")
467  void ApplyColor(bool Enabled);
468 
470  UFUNCTION(BlueprintCallable, Category = "VR Tunnelling")
471  void SetStencilMask(int32 NewStencilIndex, bool UpdateMaskedObjects = true);
472 
474  UFUNCTION(BlueprintCallable, Category = "VR Tunnelling")
475  void UpdateMaskedObjects();
476 
478  UFUNCTION(BlueprintCallable, Category = "VR Tunnelling")
479  void SetFeather(float NewFeather);
480 
481  //~ UObject interface
482  virtual void Serialize(FArchive& Ar) override;
483 
484 #if WITH_EDITOR
485  virtual void PreEditChange(UProperty* PropertyAboutToChange) override;
486  virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
487 #endif
488 
489 public:
490  //~ UActorComponent interface
491  virtual void OnComponentDestroyed(bool bDestroyingHierarchy) override;
492 
493 protected:
494  //~ Begin UActorComponent Interface.
495  virtual void CreateRenderState_Concurrent() override;
496  virtual void SendRenderTransform_Concurrent() override;
497  //~ End UActorComponent Interface.
498 
499  // Cached Motion Controller that can be read by GetParameterValue. Only valid for the duration of OnMotionControllerUpdated
500  IMotionController* InUseMotionController;
501 
502  // Blueprint Implementable function for responding to updated data from a motion controller (so we can use custom paramater values from it)
503  UFUNCTION(BlueprintImplementableEvent, Category = "Motion Controller Update")
504  void OnMotionControllerUpdated();
505 
506  // Returns the value of a custom parameter on the current in use Motion Controller (see member InUseMotionController). Only valid for the duration of OnMotionControllerUpdated
507  UFUNCTION(BlueprintCallable, Category = "Motion Controller Update")
508  float GetParameterValue(FName InName, bool& bValueFound);
509 
510 private:
511 
512  FVector LastForward;
513  FVector LastPosition;
514  float LastSpeed;
515 
516  float AngleSmoothed;
517  float VelocitySmoothed;
518  float AccelerationSmoothed;
519 
520  // Whether or not this component had a valid tracked controller associated with it this frame
521  bool bTracked;
522 
523  // Whether or not this component has authority within the frame
524  bool bHasAuthority;
525 
526  // If true, the Position and Orientation args will contain the most recent controller state
527  bool PollControllerState(FVector& Position, FRotator& Orientation, float WorldToMetersScale);
528 
529  FTransform RenderThreadRelativeTransform;
530  FVector RenderThreadComponentScale;
531 
532  void CacheSettings();
533  void InitCapture();
534  void InitSkybox();
535  void InitFromPreset();
536  void SetPresetData(UVRTPPresetData* NewPreset);
537  void UpdatePostProcessSettings();
538  void CalculateMotion(float DeltaTime);
539  void ApplyBackgroundMode();
540  void ApplyMaskMode();
541  void ApplyStencilMasks();
542 
543  // View extension object that can persist on the render thread without the motion controller component
544  class FViewExtension : public FSceneViewExtensionBase
545  {
546  public:
547  FViewExtension(const FAutoRegister& AutoRegister, UVRTunnellingPro* InMotionControllerComponent);
548  virtual ~FViewExtension() {}
549 
551  virtual void SetupViewFamily(FSceneViewFamily& InViewFamily) override {}
552  virtual void SetupView(FSceneViewFamily& InViewFamily, FSceneView& InView) override {}
553  virtual void BeginRenderViewFamily(FSceneViewFamily& InViewFamily) override;
554  virtual void PreRenderView_RenderThread(FRHICommandListImmediate& RHICmdList, FSceneView& InView) override {}
555  virtual void PreRenderViewFamily_RenderThread(FRHICommandListImmediate& RHICmdList, FSceneViewFamily& InViewFamily) override;
556  virtual void PostRenderViewFamily_RenderThread(FRHICommandListImmediate& RHICmdList, FSceneViewFamily& InViewFamily) override;
557  virtual int32 GetPriority() const override { return -10; }
558  virtual bool IsActiveThisFrame(class FViewport* InViewport) const;
559 
560  private:
561  friend class UVRTunnellingPro;
562 
564  UVRTunnellingPro* MotionControllerComponent;
565  FLateUpdateManager LateUpdate;
566  FTransform PrevTransform;
567  };
568  TSharedPtr< FViewExtension, ESPMode::ThreadSafe > ViewExtension;
569 
570 #if WITH_EDITOR
571  int32 PreEditMaterialCount = 0;
572 #endif
573 };
VRTP Preset Definition (Applied to desktop version only)
Definition: VRTP.h:38
Preset data asset definition.
Definition: VRTP.h:194
Tunnelling primitive component, for dektop applications.
Definition: VRTP.h:211