├── .gitattributes ├── .gitignore ├── Config ├── DefaultEditor.ini ├── DefaultEditorPerProjectUserSettings.ini ├── DefaultEngine.ini ├── DefaultGame.ini ├── DefaultInput.ini └── DefaultScalability.ini ├── Content ├── ABP_RightHand.uasset ├── ANIM_MannequinHand_Right_Open.uasset ├── BP_MotionController.uasset ├── BP_PlayerPawn.uasset ├── ENUM_Finger.uasset ├── ENUM_GripState.uasset ├── GM_DefaultGameMode.uasset ├── LVL_Example.umap ├── MM_HandMat.uasset ├── SKT_MannequinHandRight.uasset ├── SK_MannequinHandRight.uasset └── Visuals │ ├── UE4_Mannequin_MAT_MASKA.uasset │ └── UE4_Mannequin__normals.uasset ├── ExampleIK.uproject ├── LICENSE └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Visual Studio 2015 user specific files 2 | .vs/ 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | 22 | # Compiled Static libraries 23 | *.lai 24 | *.la 25 | *.a 26 | *.lib 27 | 28 | # Executables 29 | *.exe 30 | *.out 31 | *.app 32 | *.ipa 33 | 34 | # These project files can be generated by the engine 35 | *.xcodeproj 36 | *.xcworkspace 37 | *.sln 38 | *.suo 39 | *.opensdf 40 | *.sdf 41 | *.VC.db 42 | *.VC.opendb 43 | 44 | # Precompiled Assets 45 | SourceArt/**/*.png 46 | SourceArt/**/*.tga 47 | 48 | # Binary Files 49 | Binaries/* 50 | Plugins/*/Binaries/* 51 | 52 | # Builds 53 | Build/* 54 | 55 | # Whitelist PakBlacklist-.txt files 56 | !Build/*/ 57 | Build/*/** 58 | !Build/*/PakBlacklist*.txt 59 | 60 | # Don't ignore icon files in Build 61 | !Build/**/*.ico 62 | 63 | # Built data for maps 64 | *_BuiltData.uasset 65 | 66 | # Configuration files generated by the Editor 67 | Saved/* 68 | 69 | # Compiled source files for the engine to use 70 | Intermediate/* 71 | Plugins/*/Intermediate/* 72 | 73 | # Cache files for the editor to use 74 | DerivedDataCache/* 75 | -------------------------------------------------------------------------------- /Config/DefaultEditor.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /Config/DefaultEditorPerProjectUserSettings.ini: -------------------------------------------------------------------------------- 1 | [ContentBrowser] 2 | ContentBrowserTab1.SelectedPaths=/Game/VirtualRealityBP/Maps/ -------------------------------------------------------------------------------- /Config/DefaultEngine.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GameMapsSettings] 2 | EditorStartupMap=/Game/LVL_Example.LVL_Example 3 | LocalMapOptions= 4 | TransitionMap= 5 | bUseSplitscreen=True 6 | TwoPlayerSplitscreenLayout=Horizontal 7 | ThreePlayerSplitscreenLayout=FavorTop 8 | GameInstanceClass=/Script/Engine.GameInstance 9 | GameDefaultMap=/Game/LVL_Example.LVL_Example 10 | ServerDefaultMap=/Engine/Maps/Entry 11 | GlobalDefaultGameMode=/Game/GM_DefaultGameMode.GM_DefaultGameMode_C 12 | GlobalDefaultServerGameMode=None 13 | 14 | [/Script/Engine.Engine] 15 | +ActiveGameNameRedirects=(OldGameName="TP_VirtualRealityBP",NewGameName="/Script/ExampleIK") 16 | +ActiveGameNameRedirects=(OldGameName="/Script/TP_VirtualRealityBP",NewGameName="/Script/ExampleIK") 17 | +ActiveGameNameRedirects=(OldGameName="TP_FirstPersonBP",NewGameName="/Script/VRTemplate") 18 | +ActiveGameNameRedirects=(OldGameName="/Script/TP_FirstPersonBP",NewGameName="/Script/VRTemplate") 19 | 20 | [/Script/HardwareTargeting.HardwareTargetingSettings] 21 | TargetedHardwareClass=Desktop 22 | AppliedTargetedHardwareClass=Desktop 23 | DefaultGraphicsPerformance=Maximum 24 | AppliedDefaultGraphicsPerformance=Maximum 25 | 26 | [/Script/Engine.RendererSettings] 27 | r.DefaultFeature.AmbientOcclusion=False 28 | r.DefaultFeature.AmbientOcclusionStaticFraction=False 29 | vr.InstancedStereo=True 30 | r.SeparateTranslucency=0 31 | r.HZBOcclusion=0 32 | r.EyeAdaptionQuality=0 33 | r.SSR.MaxRoughness=0 34 | r.rhicmdbypass=0 35 | r.TiledReflectionEnvironmentMinimumCount=10 36 | 37 | [/Script/NavigationSystem.NavigationSystemV1] 38 | bAutoCreateNavigationData=True 39 | bAllowClientSideNavigation=False 40 | bInitialBuildingLocked=False 41 | bSkipAgentHeightCheckWhenPickingNavData=False 42 | DataGatheringMode=Instant 43 | bGenerateNavigationOnlyAroundNavigationInvokers=False 44 | ActiveTilesUpdateInterval=1.000000 45 | DirtyAreasUpdateFreq=60.000000 46 | 47 | [/Script/Engine.UserInterfaceSettings] 48 | RenderFocusRule=NavigationOnly 49 | DefaultCursor=None 50 | TextEditBeamCursor=None 51 | CrosshairsCursor=None 52 | HandCursor=None 53 | GrabHandCursor=None 54 | GrabHandClosedCursor=None 55 | SlashedCircleCursor=None 56 | ApplicationScale=1.000000 57 | UIScaleRule=ShortestSide 58 | CustomScalingRuleClass=None 59 | UIScaleCurve=(EditorCurveData=(PreInfinityExtrap=RCCE_Constant,PostInfinityExtrap=RCCE_Constant,Keys=((Time=480.000000,Value=0.444000),(Time=720.000000,Value=0.666000),(Time=1080.000000,Value=1.000000),(Time=8640.000000,Value=8.000000)),DefaultValue=340282346638528859811704183484516925440.000000),ExternalCurve=None) 60 | 61 | [/Script/IOSRuntimeSettings.IOSRuntimeSettings] 62 | MinimumiOSVersion=IOS_10 63 | bSupportsPortraitOrientation=False 64 | bSupportsUpsideDownOrientation=False 65 | bSupportsLandscapeLeftOrientation=True 66 | PreferredLandscapeOrientation=LandscapeLeft 67 | 68 | [/Script/HardwareTargeting.HardwareTargetingSettings] 69 | TargetedHardwareClass=Desktop 70 | DefaultGraphicsPerformance=Maximum 71 | 72 | [/Script/Engine.PhysicsSettings] 73 | DefaultGravityZ=-980.000000 74 | DefaultTerminalVelocity=4000.000000 75 | DefaultFluidFriction=0.300000 76 | SimulateScratchMemorySize=262144 77 | RagdollAggregateThreshold=4 78 | TriangleMeshTriangleMinAreaThreshold=5.000000 79 | bEnableAsyncScene=False 80 | bEnableShapeSharing=False 81 | bEnablePCM=True 82 | bEnableStabilization=False 83 | bWarnMissingLocks=True 84 | bEnable2DPhysics=False 85 | PhysicErrorCorrection=(PingExtrapolation=0.100000,PingLimit=100.000000,ErrorPerLinearDifference=1.000000,ErrorPerAngularDifference=1.000000,MaxRestoredStateError=1.000000,MaxLinearHardSnapDistance=400.000000,PositionLerp=0.000000,AngleLerp=0.400000,LinearVelocityCoefficient=100.000000,AngularVelocityCoefficient=10.000000,ErrorAccumulationSeconds=0.500000,ErrorAccumulationDistanceSq=15.000000,ErrorAccumulationSimilarity=100.000000) 86 | LockedAxis=Invalid 87 | DefaultDegreesOfFreedom=Full3D 88 | BounceThresholdVelocity=200.000000 89 | FrictionCombineMode=Average 90 | RestitutionCombineMode=Average 91 | MaxAngularVelocity=3600.000000 92 | MaxDepenetrationVelocity=0.000000 93 | ContactOffsetMultiplier=0.020000 94 | MinContactOffset=2.000000 95 | MaxContactOffset=8.000000 96 | bSimulateSkeletalMeshOnDedicatedServer=True 97 | DefaultShapeComplexity=CTF_UseSimpleAndComplex 98 | bDefaultHasComplexCollision=True 99 | bSuppressFaceRemapTable=False 100 | bSupportUVFromHitResults=False 101 | bDisableActiveActors=False 102 | bDisableKinematicStaticPairs=False 103 | bDisableKinematicKinematicPairs=False 104 | bDisableCCD=False 105 | bEnableEnhancedDeterminism=False 106 | MaxPhysicsDeltaTime=0.033333 107 | bSubstepping=False 108 | bSubsteppingAsync=False 109 | MaxSubstepDeltaTime=0.016667 110 | MaxSubsteps=6 111 | SyncSceneSmoothingFactor=0.000000 112 | AsyncSceneSmoothingFactor=0.990000 113 | InitialAverageFrameRate=0.016667 114 | PhysXTreeRebuildRate=10 115 | 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) 116 | -------------------------------------------------------------------------------- /Config/DefaultGame.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GeneralProjectSettings] 2 | ProjectID=333E2E9B438E09ED164ED486EFC6250B 3 | ProjectName=Virtual Reality BP Game Template 4 | 5 | [/Script/UnrealEd.ProjectPackagingSettings] 6 | BuildConfiguration=PPBC_Development 7 | StagingDirectory=(Path=) 8 | FullRebuild=False 9 | ForDistribution=False 10 | IncludeDebugFiles=False 11 | bNativizeBlueprintAssets=False 12 | UsePakFile=True 13 | bGenerateChunks=False 14 | bChunkHardReferencesOnly=False 15 | bBuildHttpChunkInstallData=False 16 | HttpChunkInstallDataDirectory=(Path=) 17 | HttpChunkInstallDataVersion= 18 | IncludePrerequisites=True 19 | IncludeCrashReporter=True 20 | InternationalizationPreset=English 21 | -CulturesToStage=en 22 | +CulturesToStage=en 23 | DefaultCulture=en 24 | bCookAll=False 25 | bCookMapsOnly=False 26 | bCompressed=False 27 | bSkipEditorContent=False 28 | -------------------------------------------------------------------------------- /Config/DefaultInput.ini: -------------------------------------------------------------------------------- 1 | 2 | [/Script/Engine.InputSettings] 3 | -AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) 4 | -AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) 5 | -AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) 6 | -AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) 7 | -AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) 8 | -AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) 9 | +AxisConfig=(AxisKeyName="OculusTouch_Right_FaceButton2",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 10 | +AxisConfig=(AxisKeyName="OculusTouch_Right_IndexPointing",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 11 | +AxisConfig=(AxisKeyName="OculusTouch_Right_ThumbUp",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 12 | +AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 13 | +AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 14 | +AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 15 | +AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 16 | +AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) 17 | +AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) 18 | +AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 19 | +AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 20 | +AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 21 | +AxisConfig=(AxisKeyName="MotionController_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 22 | +AxisConfig=(AxisKeyName="MotionController_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 23 | +AxisConfig=(AxisKeyName="MotionController_Left_TriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 24 | +AxisConfig=(AxisKeyName="MotionController_Left_Grip1Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 25 | +AxisConfig=(AxisKeyName="MotionController_Left_Grip2Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 26 | +AxisConfig=(AxisKeyName="MotionController_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 27 | +AxisConfig=(AxisKeyName="MotionController_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 28 | +AxisConfig=(AxisKeyName="MotionController_Right_TriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 29 | +AxisConfig=(AxisKeyName="MotionController_Right_Grip1Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 30 | +AxisConfig=(AxisKeyName="MotionController_Right_Grip2Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 31 | +AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 32 | +AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 33 | +AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 34 | +AxisConfig=(AxisKeyName="OculusTouch_Left_FaceButton1",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 35 | +AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 36 | +AxisConfig=(AxisKeyName="OculusTouch_Left_FaceButton2",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 37 | +AxisConfig=(AxisKeyName="OculusTouch_Left_IndexPointing",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 38 | +AxisConfig=(AxisKeyName="OculusTouch_Left_ThumbUp",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 39 | +AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 40 | +AxisConfig=(AxisKeyName="OculusTouch_Right_FaceButton1",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 41 | +AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 42 | +AxisConfig=(AxisKeyName="MotionController_Left_Thumbstick_Z",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 43 | +AxisConfig=(AxisKeyName="MotionController_Right_Thumbstick_Z",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) 44 | bAltEnterTogglesFullscreen=True 45 | bF11TogglesFullscreen=True 46 | bUseMouseForTouch=False 47 | bEnableMouseSmoothing=True 48 | bEnableFOVScaling=True 49 | bCaptureMouseOnLaunch=True 50 | bDefaultViewportMouseLock=True 51 | bAlwaysShowTouchInterface=False 52 | bShowConsoleOnFourFingerTap=True 53 | bEnableGestureRecognizer=False 54 | bUseAutocorrect=False 55 | DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown 56 | DefaultViewportMouseLockMode=LockOnCapture 57 | FOVScale=0.011110 58 | DoubleClickTime=0.200000 59 | +ActionMappings=(ActionName="TeleportRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_Thumbstick) 60 | +ActionMappings=(ActionName="GrabLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Left_Trigger) 61 | +ActionMappings=(ActionName="GrabRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_Trigger) 62 | +ActionMappings=(ActionName="TeleportLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Left_Thumbstick) 63 | +ActionMappings=(ActionName="HMDTeleport",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_FaceButton_Bottom) 64 | +ActionMappings=(ActionName="HMDTeleport",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=SpaceBar) 65 | +ActionMappings=(ActionName="TeleportLeft",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Left_FaceButton1) 66 | +ActionMappings=(ActionName="TeleportRight",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MotionController_Right_FaceButton1) 67 | +AxisMappings=(AxisName="TeleportDirectionUp",Scale=1.000000,Key=Gamepad_LeftY) 68 | +AxisMappings=(AxisName="TeleportDirectionRight",Scale=1.000000,Key=Gamepad_LeftX) 69 | +AxisMappings=(AxisName="MotionControllerThumbLeft_Y",Scale=-1.000000,Key=MotionController_Left_Thumbstick_Y) 70 | +AxisMappings=(AxisName="MotionControllerThumbLeft_X",Scale=1.000000,Key=MotionController_Left_Thumbstick_X) 71 | +AxisMappings=(AxisName="MotionControllerThumbRight_Y",Scale=-1.000000,Key=MotionController_Right_Thumbstick_Y) 72 | +AxisMappings=(AxisName="MotionControllerThumbRight_X",Scale=1.000000,Key=MotionController_Right_Thumbstick_X) 73 | +AxisMappings=(AxisName="Forward",Scale=1.000000,Key=W) 74 | +AxisMappings=(AxisName="Forward",Scale=-1.000000,Key=S) 75 | +AxisMappings=(AxisName="Right",Scale=-1.000000,Key=A) 76 | +AxisMappings=(AxisName="Right",Scale=1.000000,Key=D) 77 | +AxisMappings=(AxisName="MouseY",Scale=1.000000,Key=MouseY) 78 | +AxisMappings=(AxisName="MouseX",Scale=1.000000,Key=MouseX) 79 | DefaultTouchInterface=None 80 | ConsoleKey=None 81 | -ConsoleKeys=Tilde 82 | +ConsoleKeys=Tilde 83 | 84 | 85 | -------------------------------------------------------------------------------- /Config/DefaultScalability.ini: -------------------------------------------------------------------------------- 1 | 2 | [AntiAliasingQuality@0] 3 | r.PostProcessAAQuality=0 4 | 5 | [AntiAliasingQuality@1] 6 | r.PostProcessAAQuality=2 7 | 8 | [AntiAliasingQuality@2] 9 | r.PostProcessAAQuality=3 10 | 11 | [AntiAliasingQuality@3] 12 | r.PostProcessAAQuality=3 13 | 14 | ;----------------------------------------------------------------------------------------------------------------- 15 | 16 | [PostProcessQuality@0] 17 | r.MotionBlurQuality=0 18 | r.AmbientOcclusionLevels=0 19 | r.LensFlareQuality=0 20 | r.SceneColorFringeQuality=0 21 | r.DepthOfFieldQuality=0 22 | r.BloomQuality=1 23 | r.FastBlurThreshold=0 24 | 25 | [PostProcessQuality@1] 26 | r.MotionBlurQuality=0 27 | r.AmbientOcclusionLevels=0 28 | r.LensFlareQuality=0 29 | r.SceneColorFringeQuality=0 30 | r.DepthOfFieldQuality=0 31 | r.BloomQuality=1 32 | r.FastBlurThreshold=0 33 | 34 | [PostProcessQuality@2] 35 | r.MotionBlurQuality=0 36 | r.AmbientOcclusionLevels=0 37 | r.LensFlareQuality=0 38 | r.SceneColorFringeQuality=0 39 | r.DepthOfFieldQuality=0 40 | r.BloomQuality=1 41 | r.FastBlurThreshold=0 42 | 43 | [PostProcessQuality@3] 44 | r.MotionBlurQuality=0 45 | r.AmbientOcclusionLevels=0 46 | r.LensFlareQuality=0 47 | r.SceneColorFringeQuality=0 48 | r.DepthOfFieldQuality=0 49 | r.BloomQuality=1 50 | r.FastBlurThreshold=0 51 | 52 | ;----------------------------------------------------------------------------------------------------------------- 53 | 54 | [TextureQuality@0] 55 | r.MaxAnisotropy=0 56 | 57 | [TextureQuality@1] 58 | r.MaxAnisotropy=2 59 | 60 | [TextureQuality@2] 61 | r.MaxAnisotropy=4 62 | 63 | [TextureQuality@3] 64 | r.MaxAnisotropy=8 65 | 66 | ;----------------------------------------------------------------------------------------------------------------- 67 | 68 | [EffectsQuality@0] 69 | r.TranslucencyVolumeBlur=0 70 | r.TranslucencyLightingVolumeDim=4 71 | r.SceneColorFormat=2 72 | r.SSR.Quality=0 73 | 74 | [EffectsQuality@1] 75 | r.TranslucencyVolumeBlur=0 76 | r.TranslucencyLightingVolumeDim=4 77 | r.SceneColorFormat=2 78 | r.SSR.Quality=0 79 | 80 | [EffectsQuality@2] 81 | r.TranslucencyVolumeBlur=0 82 | r.TranslucencyLightingVolumeDim=4 83 | r.SceneColorFormat=2 84 | r.SSR.Quality=0 85 | 86 | [EffectsQuality@3] 87 | r.TranslucencyVolumeBlur=0 88 | r.TranslucencyLightingVolumeDim=4 89 | r.SceneColorFormat=2 90 | r.SSR.Quality=0 -------------------------------------------------------------------------------- /Content/ABP_RightHand.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/ABP_RightHand.uasset -------------------------------------------------------------------------------- /Content/ANIM_MannequinHand_Right_Open.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/ANIM_MannequinHand_Right_Open.uasset -------------------------------------------------------------------------------- /Content/BP_MotionController.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/BP_MotionController.uasset -------------------------------------------------------------------------------- /Content/BP_PlayerPawn.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/BP_PlayerPawn.uasset -------------------------------------------------------------------------------- /Content/ENUM_Finger.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/ENUM_Finger.uasset -------------------------------------------------------------------------------- /Content/ENUM_GripState.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/ENUM_GripState.uasset -------------------------------------------------------------------------------- /Content/GM_DefaultGameMode.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/GM_DefaultGameMode.uasset -------------------------------------------------------------------------------- /Content/LVL_Example.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/LVL_Example.umap -------------------------------------------------------------------------------- /Content/MM_HandMat.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/MM_HandMat.uasset -------------------------------------------------------------------------------- /Content/SKT_MannequinHandRight.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/SKT_MannequinHandRight.uasset -------------------------------------------------------------------------------- /Content/SK_MannequinHandRight.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/SK_MannequinHandRight.uasset -------------------------------------------------------------------------------- /Content/Visuals/UE4_Mannequin_MAT_MASKA.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/Visuals/UE4_Mannequin_MAT_MASKA.uasset -------------------------------------------------------------------------------- /Content/Visuals/UE4_Mannequin__normals.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Tdead1/Example_IK/8f77379e199ab53ae801450201ce5f7028ab01b1/Content/Visuals/UE4_Mannequin__normals.uasset -------------------------------------------------------------------------------- /ExampleIK.uproject: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "EngineAssociation": "4.21", 4 | "Category": "", 5 | "Description": "", 6 | "TargetPlatforms": [ 7 | "PS4", 8 | "WindowsNoEditor" 9 | ] 10 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Tdead1 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UE4.21 Finger Inverse Kinematics example 2 | 3 | ### This system creates three linetraces per finger that determine if the fingers can interact with the terrain around it. 4 | 5 | Here's a video of what it looks like: 6 | https://www.youtube.com/watch?v=OogOw5lfDuE 7 | 8 | This is a very basic and unrefined system, but it's very performance friendly. Feel free to take a look and adapt it for any purpose. I put a article on Gamasutra which has a detailed discription on how it works: 9 | http://gamasutra.com/blogs/TomKemna/20190124/335112/Inverse_kinematics_for_fingers_explanation_and_example_in_Unreal_Engine_421.php 10 | --------------------------------------------------------------------------------