diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..56a33f06425feaaf69a41c710b30f9f990a3dbb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,74 @@ +# Visual Studio 2015 user specific files +.vs/ + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# These project files can be generated by the engine +*.xcodeproj +*.xcworkspace +*.sln +*.suo +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* +Plugins/*/Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-<BuildConfiguration>.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* + +# Compiled source files for the engine to use +Intermediate/* +Plugins/*/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..1a67650303907e8c90aec83bb780360d216fb33a --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "Plugins/nDisplayExtensions"] + path = Plugins/nDisplayExtensions + url = https://devhub.vr.rwth-aachen.de/VR-Group/ndisplayextensions.git + branch = develop diff --git a/Config/DefaultEditor.ini b/Config/DefaultEditor.ini new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini new file mode 100644 index 0000000000000000000000000000000000000000..2357194d8cc9e98fbf7bf478224594be4c172759 --- /dev/null +++ b/Config/DefaultEngine.ini @@ -0,0 +1,94 @@ +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + +[/Script/EngineSettings.GameMapsSettings] +EditorStartupMap=/Game/Maps/Main.Main +GameDefaultMap=/Game/Maps/Main.Main +GlobalDefaultGameMode=/Script/nDisplayExtensions.DisplayClusterGameModeCAVE + +[/Script/Engine.Engine] +GameEngine=/Script/DisplayCluster.DisplayClusterGameEngine +UnrealEdEngine=/Script/DisplayClusterEditor.DisplayClusterEditorEngine + ++ActiveGameNameRedirects=(OldGameName="TP_nDisplayBP",NewGameName="/Script/template") ++ActiveGameNameRedirects=(OldGameName="/Script/TP_nDisplayBP",NewGameName="/Script/template") + +[/Script/DisplayClusterEditor.DisplayClusterEditorSettings] +bEnabled=True + +[/Script/WindowsTargetPlatform.WindowsTargetSettings] +Compiler=Default +-TargetedRHIs=PCD3D_SM5 +-TargetedRHIs=PCD3D_SM4 ++TargetedRHIs=PCD3D_SM5 ++TargetedRHIs=PCD3D_SM4 ++TargetedRHIs=GLSL_430 ++TargetedRHIs=GLSL_150 +MinimumOSVersion=MSOS_Vista +AudioDevice= +AudioSampleRate=48000 +AudioCallbackBufferFrameSize=1024 +AudioNumBuffersToEnqueue=1 +AudioMaxChannels=0 +AudioNumSourceWorkers=4 +SpatializationPlugin= +ReverbPlugin= +OcclusionPlugin= + +[/Script/Engine.RendererSettings] +r.DefaultFeature.Bloom=False +r.DefaultFeature.AutoExposure=False +r.DefaultFeature.MotionBlur=False + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum + +[/Script/Engine.PhysicsSettings] +DefaultGravityZ=-980.000000 +DefaultTerminalVelocity=4000.000000 +DefaultFluidFriction=0.300000 +SimulateScratchMemorySize=262144 +RagdollAggregateThreshold=4 +TriangleMeshTriangleMinAreaThreshold=5.000000 +bEnableAsyncScene=False +bEnableShapeSharing=False +bEnablePCM=True +bEnableStabilization=False +bWarnMissingLocks=True +bEnable2DPhysics=False +PhysicErrorCorrection=(PingExtrapolation=0.100000,ErrorPerLinearDifference=1.000000,ErrorPerAngularDifference=1.000000,MaxRestoredStateError=1.000000,PositionLerp=0.000000,AngleLerp=0.400000,LinearVelocityCoefficient=100.000000,AngularVelocityCoefficient=10.000000,ErrorAccumulationSeconds=0.500000,ErrorAccumulationDistanceSq=15.000000,ErrorAccumulationSimilarity=100.000000) +LockedAxis=Invalid +DefaultDegreesOfFreedom=Full3D +BounceThresholdVelocity=200.000000 +FrictionCombineMode=Average +RestitutionCombineMode=Average +MaxAngularVelocity=3600.000000 +MaxDepenetrationVelocity=0.000000 +ContactOffsetMultiplier=0.020000 +MinContactOffset=2.000000 +MaxContactOffset=8.000000 +bSimulateSkeletalMeshOnDedicatedServer=True +DefaultShapeComplexity=CTF_UseSimpleAndComplex +bDefaultHasComplexCollision=True +bSuppressFaceRemapTable=False +bSupportUVFromHitResults=False +bDisableActiveActors=False +bDisableKinematicStaticPairs=False +bDisableKinematicKinematicPairs=False +bDisableCCD=False +bEnableEnhancedDeterminism=False +MaxPhysicsDeltaTime=0.033333 +bSubstepping=False +bSubsteppingAsync=False +MaxSubstepDeltaTime=0.016667 +MaxSubsteps=6 +SyncSceneSmoothingFactor=0.000000 +AsyncSceneSmoothingFactor=0.990000 +InitialAverageFrameRate=0.016667 +PhysXTreeRebuildRate=10 +DefaultBroadphaseSettings=(bUseMBPOnClient=False,bUseMBPOnServer=False,MBPBounds=(Min=(X=0.000000,Y=0.000000,Z=0.000000),Max=(X=0.000000,Y=0.000000,Z=0.000000),IsValid=0),MBPNumSubdivs=2) + diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini new file mode 100644 index 0000000000000000000000000000000000000000..0e5b13c42aa0ab1d5f04e41f4dcc96f02c914c27 --- /dev/null +++ b/Config/DefaultGame.ini @@ -0,0 +1,8 @@ +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=6F40C2084FB7D1EAFCAEF3B2C978D28C +ProjectName=template +bUseBorderlessWindow=True + +[/Script/UnrealEd.ProjectPackagingSettings] ++DirectoriesToAlwaysStageAsNonUFS=(Path="ExampleConfigs") + diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini new file mode 100644 index 0000000000000000000000000000000000000000..e897848a946791df6ce2a59e3498340724d17f9c --- /dev/null +++ b/Config/DefaultInput.ini @@ -0,0 +1,61 @@ + +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Left_TriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Left_Grip1Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Left_Grip2Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Right_TriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Right_Grip1Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MotionController_Right_Grip2Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bDefaultViewportMouseLock=False +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 ++AxisMappings=(AxisName="MoveForward",Scale=1.000000,Key=W) ++AxisMappings=(AxisName="MoveRight",Scale=1.000000,Key=D) ++AxisMappings=(AxisName="MoveUp",Scale=1.000000,Key=E) ++AxisMappings=(AxisName="TurnRate",Scale=-1.000000,Key=Left) ++AxisMappings=(AxisName="LookUpRate",Scale=-1.000000,Key=Up) ++AxisMappings=(AxisName="MoveForward",Scale=-1.000000,Key=S) ++AxisMappings=(AxisName="MoveRight",Scale=-1.000000,Key=A) ++AxisMappings=(AxisName="MoveUp",Scale=-1.000000,Key=Q) ++AxisMappings=(AxisName="TurnRate",Scale=1.000000,Key=Right) ++AxisMappings=(AxisName="TurnRate",Scale=1.000000,Key=MouseX) ++AxisMappings=(AxisName="LookUpRate",Scale=1.000000,Key=Down) ++AxisMappings=(AxisName="LookUpRate",Scale=-1.000000,Key=MouseY) +DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks +ConsoleKey=None +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde + + diff --git a/Config/TemplateDefs.ini b/Config/TemplateDefs.ini new file mode 100644 index 0000000000000000000000000000000000000000..70be5f169bb3ca74a9f970ccf31a36a2240d7109 --- /dev/null +++ b/Config/TemplateDefs.ini @@ -0,0 +1,37 @@ +[/Script/GameProjectGeneration.TemplateProjectDefs] +LocalizedDisplayNames=(Language="en",Text="RWTH VR") +LocalizedDescriptions=(Language="en",Text="Template catering to the common use cases at RWTH VR. Contains nDisplayExtensions, AixCAVE config files, launch scripts and more.") + +ClassTypes=Character, GameMode, HUD, Actor +AssetTypes=Animation Sequence, Animation Montage, Sound Wave, Skeletal Mesh, Animation Blueprint, Skeleton, Static Mesh, Texture. + +FoldersToIgnore=Binaries +FoldersToIgnore=Build +FoldersToIgnore=Intermediate +FoldersToIgnore=Saved +FoldersToIgnore=Media + +FilesToIgnore="%TEMPLATENAME%.uproject" +FilesToIgnore="%TEMPLATENAME%.png" +FilesToIgnore="Config/TemplateDefs.ini" +FilesToIgnore="Config/config.ini" +FilesToIgnore="%TEMPLATENAME%.opensdf" +FilesToIgnore="%TEMPLATENAME%.sdf" +FilesToIgnore="%TEMPLATENAME%.v11.suo" +FilesToIgnore="%TEMPLATENAME%.v12.suo" +FilesToIgnore="%TEMPLATENAME%.sln" +FilesToIgnore="Manifest.json" +FilesToIgnore="contents.txt" +FilesToIgnore="README.md" + + +FolderRenames=(From="Source/%TEMPLATENAME%",To="Source/%PROJECTNAME%") +FolderRenames=(From="Source/%TEMPLATENAME%Editor",To="Source/%PROJECTNAME%Editor") + +FilenameReplacements=(Extensions=("cpp","h","ini","cs"),From="%TEMPLATENAME_UPPERCASE%",To="%PROJECTNAME_UPPERCASE%",bCaseSensitive=true) +FilenameReplacements=(Extensions=("cpp","h","ini","cs"),From="%TEMPLATENAME_LOWERCASE%",To="%PROJECTNAME_LOWERCASE%",bCaseSensitive=true) +FilenameReplacements=(Extensions=("cpp","h","ini","cs"),From="%TEMPLATENAME%",To="%PROJECTNAME%",bCaseSensitive=false) + +ReplacementsInFiles=(Extensions=("cpp","h","ini","cs"),From="%TEMPLATENAME_UPPERCASE%",To="%PROJECTNAME_UPPERCASE%",bCaseSensitive=true) +ReplacementsInFiles=(Extensions=("cpp","h","ini","cs"),From="%TEMPLATENAME_LOWERCASE%",To="%PROJECTNAME_LOWERCASE%",bCaseSensitive=true) +ReplacementsInFiles=(Extensions=("cpp","h","ini","cs"),From="%TEMPLATENAME%",To="%PROJECTNAME%",bCaseSensitive=false) diff --git a/Content/Configurations/aixcave.cfg b/Content/Configurations/aixcave.cfg new file mode 100644 index 0000000000000000000000000000000000000000..f99a9f548bb8382490fd2d47d35e17288037d464 --- /dev/null +++ b/Content/Configurations/aixcave.cfg @@ -0,0 +1,311 @@ +##################################################################### +# nDisplay config file +# +# This file demonstrates how to configure for the AixCAVE. +##################################################################### + +##################################################################### +# List of cluster nodes +#******************************************************************** +# Cluster node is an application instance. It's allowed to use +# multiple instances on the same PC. Sometimes its necessary. +# +# Properties: +# id - unique node name +# addr - network address (IPv4 only) +# screen - projection screen ID to use +# viewport - viewport ID to use +# master - specifies if current node is master; default is 'false' +# port_cs - Cluster Synchronization port (required on master node only) +# port_ss - Swap Synchronization port (required on master node only) +# +# Optional properties: +# sound - turns on/off sound for this application instance; default is 'false' +#******************************************************************** +[cluster_node] id=node_main addr=10.0.1.29 screen=screen_main viewport=vp_1000 port_cs=41001 port_ss=41002 master=true sound=true + +[cluster_node] id=node_front_upper_left_eye_left addr=10.0.1.1 screen=screen_front_upper_left viewport=vp_1200 +[cluster_node] id=node_front_upper_left_eye_right addr=10.0.1.1 screen=screen_front_upper_left viewport=vp_1200 +[cluster_node] id=node_front_upper_right_eye_left addr=10.0.1.2 screen=screen_front_upper_right viewport=vp_1200 +[cluster_node] id=node_front_upper_right_eye_right addr=10.0.1.2 screen=screen_front_upper_right viewport=vp_1200 +[cluster_node] id=node_front_lower_left_eye_left addr=10.0.1.3 screen=screen_front_lower_left viewport=vp_1200 +[cluster_node] id=node_front_lower_left_eye_right addr=10.0.1.3 screen=screen_front_lower_left viewport=vp_1200 +[cluster_node] id=node_front_lower_right_eye_left addr=10.0.1.4 screen=screen_front_lower_left viewport=vp_1200 +[cluster_node] id=node_front_lower_right_eye_right addr=10.0.1.4 screen=screen_front_lower_left viewport=vp_1200 + +[cluster_node] id=node_left_upper_left_eye_left addr=10.0.1.5 screen=screen_left_upper_left viewport=vp_1200 +[cluster_node] id=node_left_upper_left_eye_right addr=10.0.1.5 screen=screen_left_upper_left viewport=vp_1200 +[cluster_node] id=node_left_upper_right_eye_left addr=10.0.1.6 screen=screen_left_upper_right viewport=vp_1200 +[cluster_node] id=node_left_upper_right_eye_right addr=10.0.1.6 screen=screen_left_upper_right viewport=vp_1200 +[cluster_node] id=node_left_lower_left_eye_left addr=10.0.1.7 screen=screen_left_lower_left viewport=vp_1200 +[cluster_node] id=node_left_lower_left_eye_right addr=10.0.1.7 screen=screen_left_lower_left viewport=vp_1200 +[cluster_node] id=node_left_lower_right_eye_left addr=10.0.1.8 screen=screen_left_lower_right viewport=vp_1200 +[cluster_node] id=node_left_lower_right_eye_right addr=10.0.1.8 screen=screen_left_lower_right viewport=vp_1200 + +[cluster_node] id=node_right_upper_left_eye_left addr=10.0.1.9 screen=screen_right_upper_left viewport=vp_1200 +[cluster_node] id=node_right_upper_left_eye_right addr=10.0.1.9 screen=screen_right_upper_left viewport=vp_1200 +[cluster_node] id=node_right_upper_right_eye_left addr=10.0.1.10 screen=screen_right_upper_right viewport=vp_1200 +[cluster_node] id=node_right_upper_right_eye_right addr=10.0.1.10 screen=screen_right_upper_right viewport=vp_1200 +[cluster_node] id=node_right_lower_left_eye_left addr=10.0.1.11 screen=screen_right_lower_left viewport=vp_1200 +[cluster_node] id=node_right_lower_left_eye_right addr=10.0.1.11 screen=screen_right_lower_left viewport=vp_1200 +[cluster_node] id=node_right_lower_right_eye_left addr=10.0.1.12 screen=screen_right_lower_right viewport=vp_1200 +[cluster_node] id=node_right_lower_right_eye_right addr=10.0.1.12 screen=screen_right_lower_right viewport=vp_1200 + +[cluster_node] id=node_back_upper_left_eye_left addr=10.0.1.13 screen=screen_back_upper_left viewport=vp_1200 +[cluster_node] id=node_back_upper_left_eye_right addr=10.0.1.13 screen=screen_back_upper_left viewport=vp_1200 +[cluster_node] id=node_back_upper_right_eye_left addr=10.0.1.14 screen=screen_back_upper_right viewport=vp_1200 +[cluster_node] id=node_back_upper_right_eye_right addr=10.0.1.14 screen=screen_back_upper_right viewport=vp_1200 +[cluster_node] id=node_back_lower_left_eye_left addr=10.0.1.15 screen=screen_back_lower_left viewport=vp_1200 +[cluster_node] id=node_back_lower_left_eye_right addr=10.0.1.15 screen=screen_back_lower_left viewport=vp_1200 +[cluster_node] id=node_back_lower_right_eye_left addr=10.0.1.16 screen=screen_back_lower_right viewport=vp_1200 +[cluster_node] id=node_back_lower_right_eye_right addr=10.0.1.16 screen=screen_back_lower_right viewport=vp_1200 + +[cluster_node] id=node_floor_front_upper_left_eye_left addr=10.0.1.17 screen=screen_floor_front_upper_left viewport=vp_1200 +[cluster_node] id=node_floor_front_upper_left_eye_right addr=10.0.1.17 screen=screen_floor_front_upper_left viewport=vp_1200 +[cluster_node] id=node_floor_front_upper_right_eye_left addr=10.0.1.19 screen=screen_floor_front_upper_right viewport=vp_1200 +[cluster_node] id=node_floor_front_upper_right_eye_right addr=10.0.1.19 screen=screen_floor_front_upper_right viewport=vp_1200 +[cluster_node] id=node_floor_front_lower_left_eye_left addr=10.0.1.18 screen=screen_floor_front_lower_left viewport=vp_1200 +[cluster_node] id=node_floor_front_lower_left_eye_right addr=10.0.1.18 screen=screen_floor_front_lower_left viewport=vp_1200 +[cluster_node] id=node_floor_front_lower_right_eye_left addr=10.0.1.20 screen=screen_floor_front_lower_right viewport=vp_1200 +[cluster_node] id=node_floor_front_lower_right_eye_right addr=10.0.1.20 screen=screen_floor_front_lower_right viewport=vp_1200 + +[cluster_node] id=node_floor_back_upper_left_eye_left addr=10.0.1.21 screen=screen_floor_back_upper_left viewport=vp_1200 +[cluster_node] id=node_floor_back_upper_left_eye_right addr=10.0.1.21 screen=screen_floor_back_upper_left viewport=vp_1200 +[cluster_node] id=node_floor_back_upper_right_eye_left addr=10.0.1.23 screen=screen_floor_back_upper_right viewport=vp_1200 +[cluster_node] id=node_floor_back_upper_right_eye_right addr=10.0.1.23 screen=screen_floor_back_upper_right viewport=vp_1200 +[cluster_node] id=node_floor_back_lower_left_eye_left addr=10.0.1.22 screen=screen_floor_back_lower_left viewport=vp_1200 +[cluster_node] id=node_floor_back_lower_left_eye_right addr=10.0.1.22 screen=screen_floor_back_lower_left viewport=vp_1200 +[cluster_node] id=node_floor_back_lower_right_eye_left addr=10.0.1.24 screen=screen_floor_back_lower_right viewport=vp_1200 +[cluster_node] id=node_floor_back_lower_right_eye_right addr=10.0.1.24 screen=screen_floor_back_lower_right viewport=vp_1200 +##################################################################### + + +##################################################################### +# List of projection screens +#******************************************************************** +# Projection screen is a rectangle which determines the camera frustum. +# Usually the projection screen has the same dimensions as an output +# display but in some cases it may differ. +# +# Properties: +# id - unique projection screen name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. The pivot is a screen's +# center and the values are in meters. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. The pivot is a screen's +# center and the values are in degrees. +# size - width (X) and height (Y) of the screen. Values are in meters. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[screen] id=screen_main loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=0.433333,Y=0.270833" parent=display_main +[screen] id=screen_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_left +[screen] id=screen_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_right +[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left +[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left +[screen] id=screen_left_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_left +[screen] id=screen_left_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_right +[screen] id=screen_left_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_left +[screen] id=screen_left_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_right +[screen] id=screen_right_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_upper_left +[screen] id=screen_right_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_upper_right +[screen] id=screen_right_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_lower_left +[screen] id=screen_right_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_lower_right +[screen] id=screen_back_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_upper_left +[screen] id=screen_back_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_upper_right +[screen] id=screen_back_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_lower_left +[screen] id=screen_back_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_lower_right +[screen] id=screen_floor_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_upper_left +[screen] id=screen_floor_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_upper_right +[screen] id=screen_floor_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_lower_left +[screen] id=screen_floor_front_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_lower_right +[screen] id=screen_floor_back_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_upper_left +[screen] id=screen_floor_back_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_upper_right +[screen] id=screen_floor_back_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_lower_left +[screen] id=screen_floor_back_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_lower_right +############################################################### + + +##################################################################### +# List of viewport configurations +#******************************************************************** +# Viewport is a rectangle area of game window where rendered frame is +# mapped. Usually the viewport starts at 0:0 and has the same size as +# its parent window but in some cases these settings may differ. +# +# Properties: +# id - unique viewport name +# x - X coordinate of viewport's top left corner +# y - Y coordinate of viewport's top left corner +# width - width of viewport in pixels +# height - height of viewport in pixels +# +# Optional properties: +# flip_h - flip image horizontally; default is 'false' +# flip_v - flip image vertically; default is 'false' +#******************************************************************** +[viewport] id=vp_1000 x=0 y=0 width=1600 height=1000 flip_h=False flip_v=False +[viewport] id=vp_1200 x=0 y=0 width=1920 height=1200 flip_h=False flip_v=False +##################################################################### + + +##################################################################### +# List of cameras +#******************************************************************** +# Camera is a predefined point frome where the stereoscopic view built. +# It's possible to define multiple cameras and swith the active one +# during runtime. You're free to attach any camera to a tracking device +# for head tracking. Consider a camera as a viewer's head. +# +# Properties: +# id - unique camera name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[camera] id=camera_dynamic loc="X=0,Y=0,Z=0" parent=shutter_glasses +##################################################################### + + +##################################################################### +# List of scene nodes nodes (hierarchy transforms) +#******************************************************************** +# Scene node is an actor component which is basically a transformation +# matrix. Scene nodes can be helpful to build a component hierarchy, to +# define some special places (like a socket) within VR space. +# +# It might be difficult to understand what VR space origin is. Consider +# it as a point in space where VR space starts. Any componenent listed +# in this config file is relative to its parent or this origin. +# +# Properties: +# id - unique scene node name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[scene_node] id=cave_origin loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" +[scene_node] id=cave_center loc="X=0,Y=0,Z=1.65" rot="P=0,Y=0,R=0" parent=cave_origin + +[scene_node] id=flystick loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=7 +[scene_node] id=shutter_glasses loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=0 +[scene_node] id=display_main loc="X=0.40.0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses + +[scene_node] id=angle_left loc="X=0,Y=0,Z=0" rot="P=0,Y=-90,R=0" parent=cave_center +[scene_node] id=angle_right loc="X=0,Y=0,Z=0" rot="P=0,Y=90,R=0" parent=cave_center +[scene_node] id=angle_back loc="X=0,Y=0,Z=0" rot="P=0,Y=180,R=0" parent=cave_center +[scene_node] id=angle_floor loc="X=0,Y=0,Z=0" rot="P=-90,Y=0,R=0" parent=cave_origin + +[scene_node] id=display_front_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center +[scene_node] id=display_front_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center +[scene_node] id=display_front_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center +[scene_node] id=display_front_lower_left loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center + +[scene_node] id=display_left_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left +[scene_node] id=display_left_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left +[scene_node] id=display_left_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_left +[scene_node] id=display_left_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_left + +[scene_node] id=display_right_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_right +[scene_node] id=display_right_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_right +[scene_node] id=display_right_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_right +[scene_node] id=display_right_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_right + +[scene_node] id=display_back_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_back +[scene_node] id=display_back_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_back +[scene_node] id=display_back_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back +[scene_node] id=display_back_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back + +[scene_node] id=display_floor_front_upper_left loc="X=0,Y=-1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_upper_right loc="X=0,Y=1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_lower_left loc="X=0,Y=-1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_lower_right loc="X=0,Y=1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor + +[scene_node] id=display_floor_back_upper_left loc="X=0,Y=-1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_upper_right loc="X=0,Y=1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_lower_left loc="X=0,Y=-1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_lower_right loc="X=0,Y=1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +##################################################################### + + +##################################################################### +# List of input devices +#******************************************************************** +# Input devices are VRPN devices. The nDisplay supports the following +# types: analog, button and tracker. Many of physical input devices +# can be connected via VRPN. +# +# Properties: +# id - nique device name +# type - VRPN type (analog, button or tracker). +# addr - address of a VRPN server which handles this particular device. +# The value must match the following format: DEVICENAME@SERVER_ADDRESS +# where DEVICENAME is a VRPN name of this device and SERVER_ADDRESS +# is IPv4 address of VRPN server. +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# front (tracker only) - mapping of a tracking system axis to X axis of VR origin +# right (tracker only) - mapping of a tracking system axis to Y axis of VR origin +# up (tracker only) - mapping of a tracking system axis to Z axis of VR origin +# * The following values are allowed for axes mapping: X, -X, Y, -Y, Z, -Z +# +# Optional properties: +# remap - VRPN device channel remapping. Value format is: "from0:to0,from1:to1,...,fromN:toN". +# For example: remap="0:3,1:4,5:2" +#******************************************************************** +[input] id=DTrackAxis type=analog addr=DTrack2@10.0.1.29 +[input] id=DTrackButtons type=buttons addr=DTrack2@10.0.1.29 +[input] id=DTrackTracker type=tracker addr=DTrack2@10.0.1.29 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" right=X up=Y front=-Z +##################################################################### + + +##################################################################### +# Stereoscopic settings +#******************************************************************** +# Properties: +# eye_swap - swap left and right eyes: +# false - L|R +# true - R|L +# eye_dist - interoccular distance in meters +[stereo] eye_swap=True eye_dist=0.064 +##################################################################### + + +##################################################################### +# General settings +#******************************************************************** +# Properties: +# swap_sync_policy - swap synchronization policy +# - 0 - no synchronization +# - 1 - software swap synchronization +# - 2 - NV swap lock (Nvidia cards only, OpenGL only) +[general] swap_sync_policy=2 +##################################################################### + + +##################################################################### +# Custom arguments +#******************************************************************** +# Any custom arguments available in runtime can be specified here. +# Format: ARG_NAME=ARG_VAL +[custom] +##################################################################### diff --git a/Content/Configurations/aixcave_infiniband.cfg b/Content/Configurations/aixcave_infiniband.cfg new file mode 100644 index 0000000000000000000000000000000000000000..f2cb3edd0dfdb692988dfa5900bf5b6fdbcde265 --- /dev/null +++ b/Content/Configurations/aixcave_infiniband.cfg @@ -0,0 +1,311 @@ +##################################################################### +# nDisplay config file +# +# This file demonstrates how to configure for the AixCAVE. +##################################################################### + +##################################################################### +# List of cluster nodes +#******************************************************************** +# Cluster node is an application instance. It's allowed to use +# multiple instances on the same PC. Sometimes its necessary. +# +# Properties: +# id - unique node name +# addr - network address (IPv4 only) +# screen - projection screen ID to use +# viewport - viewport ID to use +# master - specifies if current node is master; default is 'false' +# port_cs - Cluster Synchronization port (required on master node only) +# port_ss - Swap Synchronization port (required on master node only) +# +# Optional properties: +# sound - turns on/off sound for this application instance; default is 'false' +#******************************************************************** +[cluster_node] id=node_main addr=134.61.47.29 screen=screen_main viewport=vp_1000 port_cs=41001 port_ss=41002 master=true sound=true + +[cluster_node] id=node_front_upper_left_eye_left addr=134.61.47.132 screen=screen_front_upper_left viewport=vp_1200 +[cluster_node] id=node_front_upper_left_eye_right addr=134.61.47.132 screen=screen_front_upper_left viewport=vp_1200 +[cluster_node] id=node_front_upper_right_eye_left addr=134.61.47.133 screen=screen_front_upper_right viewport=vp_1200 +[cluster_node] id=node_front_upper_right_eye_right addr=134.61.47.133 screen=screen_front_upper_right viewport=vp_1200 +[cluster_node] id=node_front_lower_left_eye_left addr=134.61.47.134 screen=screen_front_lower_left viewport=vp_1200 +[cluster_node] id=node_front_lower_left_eye_right addr=134.61.47.134 screen=screen_front_lower_left viewport=vp_1200 +[cluster_node] id=node_front_lower_right_eye_left addr=134.61.47.135 screen=screen_front_lower_left viewport=vp_1200 +[cluster_node] id=node_front_lower_right_eye_right addr=134.61.47.135 screen=screen_front_lower_left viewport=vp_1200 + +[cluster_node] id=node_left_upper_left_eye_left addr=134.61.47.136 screen=screen_left_upper_left viewport=vp_1200 +[cluster_node] id=node_left_upper_left_eye_right addr=134.61.47.136 screen=screen_left_upper_left viewport=vp_1200 +[cluster_node] id=node_left_upper_right_eye_left addr=134.61.47.137 screen=screen_left_upper_right viewport=vp_1200 +[cluster_node] id=node_left_upper_right_eye_right addr=134.61.47.137 screen=screen_left_upper_right viewport=vp_1200 +[cluster_node] id=node_left_lower_left_eye_left addr=134.61.47.138 screen=screen_left_lower_left viewport=vp_1200 +[cluster_node] id=node_left_lower_left_eye_right addr=134.61.47.138 screen=screen_left_lower_left viewport=vp_1200 +[cluster_node] id=node_left_lower_right_eye_left addr=134.61.47.139 screen=screen_left_lower_right viewport=vp_1200 +[cluster_node] id=node_left_lower_right_eye_right addr=134.61.47.139 screen=screen_left_lower_right viewport=vp_1200 + +[cluster_node] id=node_right_upper_left_eye_left addr=134.61.47.140 screen=screen_right_upper_left viewport=vp_1200 +[cluster_node] id=node_right_upper_left_eye_right addr=134.61.47.140 screen=screen_right_upper_left viewport=vp_1200 +[cluster_node] id=node_right_upper_right_eye_left addr=134.61.47.141 screen=screen_right_upper_right viewport=vp_1200 +[cluster_node] id=node_right_upper_right_eye_right addr=134.61.47.141 screen=screen_right_upper_right viewport=vp_1200 +[cluster_node] id=node_right_lower_left_eye_left addr=134.61.47.142 screen=screen_right_lower_left viewport=vp_1200 +[cluster_node] id=node_right_lower_left_eye_right addr=134.61.47.142 screen=screen_right_lower_left viewport=vp_1200 +[cluster_node] id=node_right_lower_right_eye_left addr=134.61.47.143 screen=screen_right_lower_right viewport=vp_1200 +[cluster_node] id=node_right_lower_right_eye_right addr=134.61.47.143 screen=screen_right_lower_right viewport=vp_1200 + +[cluster_node] id=node_back_upper_left_eye_left addr=134.61.47.144 screen=screen_back_upper_left viewport=vp_1200 +[cluster_node] id=node_back_upper_left_eye_right addr=134.61.47.144 screen=screen_back_upper_left viewport=vp_1200 +[cluster_node] id=node_back_upper_right_eye_left addr=134.61.47.145 screen=screen_back_upper_right viewport=vp_1200 +[cluster_node] id=node_back_upper_right_eye_right addr=134.61.47.145 screen=screen_back_upper_right viewport=vp_1200 +[cluster_node] id=node_back_lower_left_eye_left addr=134.61.47.146 screen=screen_back_lower_left viewport=vp_1200 +[cluster_node] id=node_back_lower_left_eye_right addr=134.61.47.146 screen=screen_back_lower_left viewport=vp_1200 +[cluster_node] id=node_back_lower_right_eye_left addr=134.61.47.147 screen=screen_back_lower_right viewport=vp_1200 +[cluster_node] id=node_back_lower_right_eye_right addr=134.61.47.147 screen=screen_back_lower_right viewport=vp_1200 + +[cluster_node] id=node_floor_front_upper_left_eye_left addr=134.61.47.148 screen=screen_floor_front_upper_left viewport=vp_1200 +[cluster_node] id=node_floor_front_upper_left_eye_right addr=134.61.47.148 screen=screen_floor_front_upper_left viewport=vp_1200 +[cluster_node] id=node_floor_front_upper_right_eye_left addr=134.61.47.150 screen=screen_floor_front_upper_right viewport=vp_1200 +[cluster_node] id=node_floor_front_upper_right_eye_right addr=134.61.47.150 screen=screen_floor_front_upper_right viewport=vp_1200 +[cluster_node] id=node_floor_front_lower_left_eye_left addr=134.61.47.149 screen=screen_floor_front_lower_left viewport=vp_1200 +[cluster_node] id=node_floor_front_lower_left_eye_right addr=134.61.47.149 screen=screen_floor_front_lower_left viewport=vp_1200 +[cluster_node] id=node_floor_front_lower_right_eye_left addr=134.61.47.151 screen=screen_floor_front_lower_right viewport=vp_1200 +[cluster_node] id=node_floor_front_lower_right_eye_right addr=134.61.47.151 screen=screen_floor_front_lower_right viewport=vp_1200 + +[cluster_node] id=node_floor_back_upper_left_eye_left addr=134.61.47.152 screen=screen_floor_back_upper_left viewport=vp_1200 +[cluster_node] id=node_floor_back_upper_left_eye_right addr=134.61.47.152 screen=screen_floor_back_upper_left viewport=vp_1200 +[cluster_node] id=node_floor_back_upper_right_eye_left addr=134.61.47.154 screen=screen_floor_back_upper_right viewport=vp_1200 +[cluster_node] id=node_floor_back_upper_right_eye_right addr=134.61.47.154 screen=screen_floor_back_upper_right viewport=vp_1200 +[cluster_node] id=node_floor_back_lower_left_eye_left addr=134.61.47.153 screen=screen_floor_back_lower_left viewport=vp_1200 +[cluster_node] id=node_floor_back_lower_left_eye_right addr=134.61.47.153 screen=screen_floor_back_lower_left viewport=vp_1200 +[cluster_node] id=node_floor_back_lower_right_eye_left addr=134.61.47.155 screen=screen_floor_back_lower_right viewport=vp_1200 +[cluster_node] id=node_floor_back_lower_right_eye_right addr=134.61.47.155 screen=screen_floor_back_lower_right viewport=vp_1200 +##################################################################### + + +##################################################################### +# List of projection screens +#******************************************************************** +# Projection screen is a rectangle which determines the camera frustum. +# Usually the projection screen has the same dimensions as an output +# display but in some cases it may differ. +# +# Properties: +# id - unique projection screen name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. The pivot is a screen's +# center and the values are in meters. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. The pivot is a screen's +# center and the values are in degrees. +# size - width (X) and height (Y) of the screen. Values are in meters. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[screen] id=screen_main loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=0.433333,Y=0.270833" parent=display_main +[screen] id=screen_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_left +[screen] id=screen_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_upper_right +[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left +[screen] id=screen_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_front_lower_left +[screen] id=screen_left_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_left +[screen] id=screen_left_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_upper_right +[screen] id=screen_left_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_left +[screen] id=screen_left_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_left_lower_right +[screen] id=screen_right_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_upper_left +[screen] id=screen_right_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_upper_right +[screen] id=screen_right_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_lower_left +[screen] id=screen_right_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_right_lower_right +[screen] id=screen_back_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_upper_left +[screen] id=screen_back_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_upper_right +[screen] id=screen_back_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_lower_left +[screen] id=screen_back_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3.14285,Y=1.964285" parent=display_back_lower_right +[screen] id=screen_floor_front_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_upper_left +[screen] id=screen_floor_front_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_upper_right +[screen] id=screen_floor_front_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_lower_left +[screen] id=screen_floor_front_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_front_lower_right +[screen] id=screen_floor_back_upper_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_upper_left +[screen] id=screen_floor_back_upper_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_upper_right +[screen] id=screen_floor_back_lower_left loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_lower_left +[screen] id=screen_floor_back_lower_right loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" size="X=3,Y=1.875" parent=display_floor_back_lower_right +############################################################### + + +##################################################################### +# List of viewport configurations +#******************************************************************** +# Viewport is a rectangle area of game window where rendered frame is +# mapped. Usually the viewport starts at 0:0 and has the same size as +# its parent window but in some cases these settings may differ. +# +# Properties: +# id - unique viewport name +# x - X coordinate of viewport's top left corner +# y - Y coordinate of viewport's top left corner +# width - width of viewport in pixels +# height - height of viewport in pixels +# +# Optional properties: +# flip_h - flip image horizontally; default is 'false' +# flip_v - flip image vertically; default is 'false' +#******************************************************************** +[viewport] id=vp_1000 x=0 y=0 width=1600 height=1000 flip_h=False flip_v=False +[viewport] id=vp_1200 x=0 y=0 width=1920 height=1200 flip_h=False flip_v=False +##################################################################### + + +##################################################################### +# List of cameras +#******************************************************************** +# Camera is a predefined point frome where the stereoscopic view built. +# It's possible to define multiple cameras and swith the active one +# during runtime. You're free to attach any camera to a tracking device +# for head tracking. Consider a camera as a viewer's head. +# +# Properties: +# id - unique camera name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[camera] id=camera_dynamic loc="X=0,Y=0,Z=0" parent=shutter_glasses +##################################################################### + + +##################################################################### +# List of scene nodes nodes (hierarchy transforms) +#******************************************************************** +# Scene node is an actor component which is basically a transformation +# matrix. Scene nodes can be helpful to build a component hierarchy, to +# define some special places (like a socket) within VR space. +# +# It might be difficult to understand what VR space origin is. Consider +# it as a point in space where VR space starts. Any componenent listed +# in this config file is relative to its parent or this origin. +# +# Properties: +# id - unique scene node name +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# Optional properties: +# parent - ID of parent component in VR hierarchy; default is VR root. +# tracker_id - ID of tracking device; no tracking by default. +# tracker_ch - ID of tracking device's channel; no tracking by default. +#******************************************************************** +[scene_node] id=cave_origin loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" +[scene_node] id=cave_center loc="X=0,Y=0,Z=1.65" rot="P=0,Y=0,R=0" parent=cave_origin + +[scene_node] id=flystick loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=7 +[scene_node] id=shutter_glasses loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=cave_origin tracker_id=DTrackTracker tracker_ch=0 +[scene_node] id=display_main loc="X=0.40.0,Y=0,Z=0" rot="P=0,Y=0,R=0" parent=shutter_glasses + +[scene_node] id=angle_left loc="X=0,Y=0,Z=0" rot="P=0,Y=-90,R=0" parent=cave_center +[scene_node] id=angle_right loc="X=0,Y=0,Z=0" rot="P=0,Y=90,R=0" parent=cave_center +[scene_node] id=angle_back loc="X=0,Y=0,Z=0" rot="P=0,Y=180,R=0" parent=cave_center +[scene_node] id=angle_floor loc="X=0,Y=0,Z=0" rot="P=-90,Y=0,R=0" parent=cave_origin + +[scene_node] id=display_front_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center +[scene_node] id=display_front_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=cave_center +[scene_node] id=display_front_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center +[scene_node] id=display_front_lower_left loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=cave_center + +[scene_node] id=display_left_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left +[scene_node] id=display_left_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_left +[scene_node] id=display_left_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_left +[scene_node] id=display_left_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_left + +[scene_node] id=display_right_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_right +[scene_node] id=display_right_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_right +[scene_node] id=display_right_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_right +[scene_node] id=display_right_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_right + +[scene_node] id=display_back_upper_left loc="X=2.625,Y=-1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_back +[scene_node] id=display_back_upper_right loc="X=2.625,Y=+1.053575,Z=+0.6678575" rot="P=0,Y=0,R=0" parent=angle_back +[scene_node] id=display_back_lower_left loc="X=2.625,Y=-1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back +[scene_node] id=display_back_lower_right loc="X=2.625,Y=+1.053575,Z=-0.6678575" rot="P=0,Y=0,R=0" parent=angle_back + +[scene_node] id=display_floor_front_upper_left loc="X=0,Y=-1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_upper_right loc="X=0,Y=1.125,Z=+1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_lower_left loc="X=0,Y=-1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_front_lower_right loc="X=0,Y=1.125,Z=+0.9375" rot="P=0,Y=0,R=0" parent=angle_floor + +[scene_node] id=display_floor_back_upper_left loc="X=0,Y=-1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_upper_right loc="X=0,Y=1.125,Z=-0.9375" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_lower_left loc="X=0,Y=-1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +[scene_node] id=display_floor_back_lower_right loc="X=0,Y=1.125,Z=-1.6875" rot="P=0,Y=0,R=0" parent=angle_floor +##################################################################### + + +##################################################################### +# List of input devices +#******************************************************************** +# Input devices are VRPN devices. The nDisplay supports the following +# types: analog, button and tracker. Many of physical input devices +# can be connected via VRPN. +# +# Properties: +# id - nique device name +# type - VRPN type (analog, button or tracker). +# addr - address of a VRPN server which handles this particular device. +# The value must match the following format: DEVICENAME@SERVER_ADDRESS +# where DEVICENAME is a VRPN name of this device and SERVER_ADDRESS +# is IPv4 address of VRPN server. +# loc - relative location to the parent component. Location is relative +# to the VR root if no parent specified. +# rot - relative rotation to the parent component. Rotation is relative +# to the VR root if no parent specified. +# +# front (tracker only) - mapping of a tracking system axis to X axis of VR origin +# right (tracker only) - mapping of a tracking system axis to Y axis of VR origin +# up (tracker only) - mapping of a tracking system axis to Z axis of VR origin +# * The following values are allowed for axes mapping: X, -X, Y, -Y, Z, -Z +# +# Optional properties: +# remap - VRPN device channel remapping. Value format is: "from0:to0,from1:to1,...,fromN:toN". +# For example: remap="0:3,1:4,5:2" +#******************************************************************** +[input] id=DTrackAxis type=analog addr=DTrack2@10.0.1.29 +[input] id=DTrackButtons type=buttons addr=DTrack2@10.0.1.29 +[input] id=DTrackTracker type=tracker addr=DTrack2@10.0.1.29 loc="X=0,Y=0,Z=0" rot="P=0,Y=0,R=0" right=X up=Y front=-Z +##################################################################### + + +##################################################################### +# Stereoscopic settings +#******************************************************************** +# Properties: +# eye_swap - swap left and right eyes: +# false - L|R +# true - R|L +# eye_dist - interoccular distance in meters +[stereo] eye_swap=True eye_dist=0.064 +##################################################################### + + +##################################################################### +# General settings +#******************************************************************** +# Properties: +# swap_sync_policy - swap synchronization policy +# - 0 - no synchronization +# - 1 - software swap synchronization +# - 2 - NV swap lock (Nvidia cards only, OpenGL only) +[general] swap_sync_policy=2 +##################################################################### + + +##################################################################### +# Custom arguments +#******************************************************************** +# Any custom arguments available in runtime can be specified here. +# Format: ARG_NAME=ARG_VAL +[custom] +##################################################################### diff --git a/Content/Maps/Main.umap b/Content/Maps/Main.umap new file mode 100644 index 0000000000000000000000000000000000000000..bfb6f44a45cfa1d404091e51719825a835b71825 Binary files /dev/null and b/Content/Maps/Main.umap differ diff --git a/Plugins/nDisplayExtensions b/Plugins/nDisplayExtensions new file mode 160000 index 0000000000000000000000000000000000000000..986c727e2d633d44028b7c44a9ef8f17dda1baeb --- /dev/null +++ b/Plugins/nDisplayExtensions @@ -0,0 +1 @@ +Subproject commit 986c727e2d633d44028b7c44a9ef8f17dda1baeb diff --git a/Shell/run_cave.py b/Shell/run_cave.py new file mode 100644 index 0000000000000000000000000000000000000000..f8528960291068ec1a8ef9212d08843e79464433 --- /dev/null +++ b/Shell/run_cave.py @@ -0,0 +1,84 @@ +import subprocess +import sys +import time + +application_filepath = "../Binaries/Linux/template.bin" +configuration_filepath = "../Content/Configurations/aixcave.cfg" +dtrack_filepath = "/home/vrsw/DTrack/DTrack2_v2.13.0/bin/DTrack2.bin" +vrpn_filepath = "/home/vrsw/vrpn/vrpn_git/build_clang/server_src/vrpn_server" +vrpn_config_filepath = "/home/vrsw/vrpn/vrpn_git/build_clang/server_src/vrpn.cfg" + +hostname_lookup_table = { + "10.0.1.1" : "ngs01", + "10.0.1.2" : "ngs02", + "10.0.1.3" : "ngs03", + "10.0.1.4" : "ngs04", + "10.0.1.5" : "ngs05", + "10.0.1.6" : "ngs06", + "10.0.1.7" : "ngs07", + "10.0.1.8" : "ngs08", + "10.0.1.9" : "ngs09", + "10.0.1.10": "ngs10", + "10.0.1.11": "ngs11", + "10.0.1.12": "ngs12", + "10.0.1.13": "ngs13", + "10.0.1.14": "ngs14", + "10.0.1.15": "ngs15", + "10.0.1.16": "ngs16", + "10.0.1.17": "ngs17", + "10.0.1.18": "ngs18", + "10.0.1.19": "ngs19", + "10.0.1.20": "ngs20", + "10.0.1.21": "ngs21", + "10.0.1.22": "ngs22", + "10.0.1.23": "ngs23", + "10.0.1.24": "ngs24", + "10.0.1.25": "ngd01", + "10.0.1.26": "ngd02", + "10.0.1.29": "ngm01" +} + +def main(): + subprocess.call(["source module load clang/5.0"], shell=True) + subprocess.call(["mkdir -p slave_logs" ], shell=True) + + dtrack_process = subprocess.Popen([dtrack_filepath + " -directstart -measure -wakeup" ], shell=True) + time.sleep(2) + vrpn_process = subprocess.Popen([vrpn_filepath + " -f " + vrpn_config_filepath + " -millisleep 0"], shell=True) + time.sleep(2) + + processes = [] + + with open(configuration_filepath) as configuration_file: + lines = configuration_file.readlines() + + for line in lines: + if line.startsWith("#") or ("[cluster_node]" not in line) or ("master" in line): + continue + + split_line = line.split() + name = split_line[1][3:] + ip = split_line[2][5:] + + processes.append(subprocess.Popen([ + "ssh " + hostname_lookup_table[ip] + + " export XAUTHORITY=/var/run/Xauthority-vr; export DISPLAY=:0." + ("1" if ("eye_left" in name) else "0") + ";" + " /bin/nice_av00 -n -15 " + application_filepath + + " ResX=1920 ResY=1200 WinX=0 WinY=0 -fixedseed -nosplash -opengl4 -fullscreen" + + " dc_cfg=" + configuration_filepath + " dc_node=" + name + " -dc_cluster -dc_dev_mono" + " > slave_logs/slave_" + name + ".log"], shell=True)) + sleep(0.1) + + subprocess.call([ + "/bin/nice_av00 -n -15 " + application_filepath + + " ResX=1600 ResY=1000 WinX=0 WinY=0 -fixedseed -nosplash -opengl4 -useallavailablecores -windowed" + + " dc_cfg=" + configuration_filepath + " dc_node=node_main -dc_cluster -dc_dev_mono"], shell=True) + + for process in processes: + process.kill() + + vrpn_process .kill() + dtrack_process.kill() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/Shell/run_cave.sh b/Shell/run_cave.sh new file mode 100644 index 0000000000000000000000000000000000000000..73c9e813b01fe6c2f70bf7df08da014184821b20 --- /dev/null +++ b/Shell/run_cave.sh @@ -0,0 +1,2 @@ +#!/bin/bash +python ./run_cave.py \ No newline at end of file diff --git a/Source/template.Target.cs b/Source/template.Target.cs new file mode 100644 index 0000000000000000000000000000000000000000..c86e05d30c3f395eee54a7a8ba79dd8ea8ec0df1 --- /dev/null +++ b/Source/template.Target.cs @@ -0,0 +1,14 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class templateTarget : TargetRules +{ + public templateTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Game; + + ExtraModuleNames.AddRange( new string[] { "template" } ); + } +} diff --git a/Source/template/nothing.cpp b/Source/template/nothing.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bc209f31730df6167aad7fd78995dcb42f1fe0db --- /dev/null +++ b/Source/template/nothing.cpp @@ -0,0 +1,10 @@ +#include "nothing.h" + +nothing::nothing() +{ + +} +nothing::~nothing() +{ + +} diff --git a/Source/template/nothing.h b/Source/template/nothing.h new file mode 100644 index 0000000000000000000000000000000000000000..94bb46ccd2876b015581e475136c1c301ebdaaab --- /dev/null +++ b/Source/template/nothing.h @@ -0,0 +1,10 @@ +#pragma once + +#include "CoreMinimal.h" + +class TEMPLATE_API nothing +{ +public: + nothing(); + ~nothing(); +}; diff --git a/Source/template/template.Build.cs b/Source/template/template.Build.cs new file mode 100644 index 0000000000000000000000000000000000000000..286c427b71faf64d3db7731baf24a2125cbbf296 --- /dev/null +++ b/Source/template/template.Build.cs @@ -0,0 +1,23 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; + +public class template : ModuleRules +{ + public template(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" }); + + PrivateDependencyModuleNames.AddRange(new string[] { }); + + // Uncomment if you are using Slate UI + // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); + + // Uncomment if you are using online features + // PrivateDependencyModuleNames.Add("OnlineSubsystem"); + + // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true + } +} diff --git a/Source/template/template.cpp b/Source/template/template.cpp new file mode 100644 index 0000000000000000000000000000000000000000..cd63fb06f09e036972d4048b824a956cfbf4828c --- /dev/null +++ b/Source/template/template.cpp @@ -0,0 +1,4 @@ +#include "template.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, template, "template" ); diff --git a/Source/template/template.h b/Source/template/template.h new file mode 100644 index 0000000000000000000000000000000000000000..fe82abe038ecee3f8bfa5dd7306707c14b18ee2b --- /dev/null +++ b/Source/template/template.h @@ -0,0 +1,4 @@ +#pragma once + +#include "CoreMinimal.h" + diff --git a/Source/templateEditor.Target.cs b/Source/templateEditor.Target.cs new file mode 100644 index 0000000000000000000000000000000000000000..0ef678778a8098a42cfc78ff5dd4625ee0ca4953 --- /dev/null +++ b/Source/templateEditor.Target.cs @@ -0,0 +1,14 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class templateEditorTarget : TargetRules +{ + public templateEditorTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + + ExtraModuleNames.AddRange( new string[] { "template" } ); + } +} diff --git a/template.png b/template.png new file mode 100644 index 0000000000000000000000000000000000000000..ea40b3fd616f3f14ea10d11463460a8cbf16d602 Binary files /dev/null and b/template.png differ diff --git a/template.uproject b/template.uproject new file mode 100644 index 0000000000000000000000000000000000000000..7dd8b048fd9d3b765bd5ed48fe755dca0238c98c --- /dev/null +++ b/template.uproject @@ -0,0 +1,22 @@ +{ + "FileVersion": 3, + "EngineAssociation": "4.20", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "template", + "Type": "Runtime", + "LoadingPhase": "Default" + } + ], + "Plugins": [ + { + "Name": "nDisplay", + "Enabled": true + } + ], + "TargetPlatforms": [ + "WindowsNoEditor" + ] +} \ No newline at end of file