AeroComp - Modular Aerodynamics Simulation Components


NOW ON MARKETPLACE

Hey all,
Above is a reveal video for AeroComp, a set of modular actor components that lets you create wide range of aircraft and other objects that have aerodynamic behavior/traits.
This is something I have been working on/off for past several months (I remember starting it when 4.7 was fresh out).
AeroComp is the result of months of research into simulating Aerodynamics in UE4. With the advent of Actor Components it became possible to detach reusable behavior and functionality from Blueprints and encapsulate it in Actor Components. AeroComp is a collection of such Actor Components, each of which enables specific Aerodynamic phenomena simulation using PhysX . While creating these components the emphasis was made to make the components reusable for all scenarios, and as the result of such reusability, the same set of components enables their user to simulate broad range of flying bodies both Fixed-wing (Airplanes) and Rotary-wing(Helicopters). Come to think of it there is quite a lot more you can simulate with these components, be that a hot air balloon, a zeppelin or an arrow. Multiple simulation modes on specific components cater to wide range of uses. For example Linear simulation mode is useful for quickly setting up he component by inputting several values, while Curve simulation mode provides more advanced functionality and a finer grain of control where realism is most needed. Components come bundled with other goodies such as utility function library to calculate several aerodynamic variables and sample curves to use with curve simulation modes.

TLDR: These component set enables you to create cool flying things by just drag/dropping them and punching in some numbers :)))
Link to a playable demo:
http://3.bp.blogspot.com/-WO0AUJFI5Bc/VA1QG43HNCI/AAAAAAAAA2g/Ue5w8HIcq_o/s1600/Download-Button_dropbox.png

Thanks to everyone for your feedback and interest.
[HR][/HR]
Status:
*[11/30/2015] Submitted to marketplace
*[12/6/2015] Preparing assets for Epic QA
*[1/10/2016] Submitted to Epic QA (I know - took me a while :frowning: )
*[1/27/2016] Submission passed Epic QA
*[3/10/2016] Release date set to March 16, 2016
*[3/16/2016] Released on Marketplace (first buyer rennsix - what have I done to deserve such a supportive person?)
*[4/1/2016] Update for 4.11 submitted
*[6/2/2016] Verified 4.12 Compatibility, all good! Notified Epic

[HR][/HR]
AeroComp Changelog

  • [4/1/2015][Done] Submitted updated files for 4.11: no changes to components, minor change to demo asset material. 4.11 introduced a bug with springArm, you can read about it in post-realease notes.[UE-28753]
  • [4/5/2015][Done] 4.11 update live on Marketplace
  • [6/3/2016][Done] 4.12 version live on Marketplace

[HR][/HR]
Demo changelog and special thanks:

  • [11/30/2015][Done] inverted elevator visuals for correct behavior. Special thanks: arbopa and mookiexl
  • [11/30/2015][Done] Adding gamepad inputs.[LTrigger/RTrigger for Throttle, Left Thumbstick for pitch and roll. I apologize beforehand if they dont work as intended, unfortunately I do not own a gamepad and was unable to test. Post if it doesn’t behave as it should and/or request more bindings, I’ll be happy to add] Special thanks: mookiexl and rennsix
  • [12/2/2015][Done] Increased pitch and roll sensitivity for planes. Increased engine power a bit. Special thanks: TooManyfps
  • [12/3/2015][Done] Fixed physics setup in project, this caused aircraft controls to vary with FPS. Special thanks: Mookiexl, BoredEngineer, rennsix and anyone who commented on controls being a bit stiff
  • [12/3/2015][Done] Black Hawk’s stabilization now also does an “altitude hold”, should make the Black Hawk easier to fly. Toggle it off (G key) if you want a challenge. Special thanks: rennsix
  • [12/3/2015][Done] Additional gamepad inputs.[Right ThumbStick X-axis for yaw(planes)/roll(heli), and Y-axis for throttle. I apologize beforehand if they dont work as intended, unfortunately I do not own a gamepad and was unable to test. Post if it doesn’t behave as it should and/or request more bindings, I’ll be happy to add] Special thanks: rennsix
  • [12/6/2015][Done] Tweaked jet control sensitivity (was too much). Inverted Right thumbstick Y axis Throttle control. Up for more, down for less.
  • [4/1/2016][WIP] Parachute being added to demo. Will be transfered to marketplace content once matured. Special thanks: Brian Lancaster for inquiry
    [HR][/HR]

ATTENTION BUYERS(POST-RELEASE NOTES):

  1. While I have submitted DefaultInput.ini file that was supposed to be located in Config folder, the Aerocomp does not include it when you download it though marketplace. The reason for this is that Aerocomp (like many other assets on Marketplace) is supposed to be an addition to your project, not a standalone project by itself. Therefore in order to NOT override your DefaultInput.ini config file (that you could have spent considerable amount of time configuring), the project does not include it at download time. The downside to that is that you don’t have some controls mapped on example aircraft. Solution: A)copy below code to your DefaultInput.ini config file OR B)rename/modify/replace the input events/names in example aircraft to your liking to be able to test-fly included example aircraft.


[/Script/Engine.InputSettings]
-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="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))
bAltEnterTogglesFullscreen=True
bUseMouseForTouch=False
bEnableMouseSmoothing=True
bEnableFOVScaling=True
FOVScale=0.011110
DoubleClickTime=0.200000
-ActionMappings=(ActionName="Camera toggle",Key=C,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Camera toggle",Key=Gamepad_DPad_Up,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Camera toggle",Key=Gamepad_DPad_Down,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Camera toggle",Key=Gamepad_FaceButton_Top,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Restart",Key=R,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Restart",Key=Gamepad_FaceButton_Right,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Camera toggle",Key=Gamepad_Special_Left,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Fire",Key=LeftMouseButton,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Jump",Key=SpaceBar,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="ControlPawn",Key=F,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="SpawnActor",Key=Enter,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-ActionMappings=(ActionName="Crouch",Key=LeftControl,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
+ActionMappings=(ActionName="Jump",Key=SpaceBar,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
+ActionMappings=(ActionName="Jump",Key=Gamepad_FaceButton_Bottom,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
+ActionMappings=(ActionName="Fire",Key=LeftMouseButton,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
+ActionMappings=(ActionName="Fire",Key=Gamepad_RightTrigger,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
+ActionMappings=(ActionName="Camera toggle",Key=C,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
+ActionMappings=(ActionName="ControlPawn",Key=F,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
+ActionMappings=(ActionName="Crouch",Key=C,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
+ActionMappings=(ActionName="gear/stab",Key=G,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
-AxisMappings=(AxisName="MoveForward",Key=W,Scale=1.000000)
-AxisMappings=(AxisName="MoveForward",Key=S,Scale=-1.000000)
-AxisMappings=(AxisName="MoveForward",Key=Up,Scale=1.000000)
-AxisMappings=(AxisName="MoveForward",Key=Down,Scale=-1.000000)
-AxisMappings=(AxisName="MoveRight",Key=A,Scale=-1.000000)
-AxisMappings=(AxisName="MoveRight",Key=D,Scale=1.000000)
-AxisMappings=(AxisName="MoveRight",Key=Gamepad_LeftX,Scale=1.000000)
-AxisMappings=(AxisName="MoveUp",Key=Gamepad_LeftThumbstick,Scale=1.000000)
-AxisMappings=(AxisName="MoveUp",Key=Gamepad_RightThumbstick,Scale=-1.000000)
-AxisMappings=(AxisName="MoveUp",Key=Gamepad_FaceButton_Bottom,Scale=1.000000)
-AxisMappings=(AxisName="MoveUp",Key=LeftControl,Scale=-1.000000)
-AxisMappings=(AxisName="MoveUp",Key=SpaceBar,Scale=1.000000)
-AxisMappings=(AxisName="MoveUp",Key=C,Scale=-1.000000)
-AxisMappings=(AxisName="Turn",Key=MouseX,Scale=1.000000)
-AxisMappings=(AxisName="Turn",Key=Left,Scale=-1.000000)
-AxisMappings=(AxisName="Turn",Key=Right,Scale=1.000000)
-AxisMappings=(AxisName="LookUp",Key=Gamepad_RightY,Scale=1.000000)
-AxisMappings=(AxisName="LookUp",Key=MouseY,Scale=-1.000000)
-AxisMappings=(AxisName="YawRight",Key=E,Scale=1.000000)
-AxisMappings=(AxisName="YawRight",Key=Q,Scale=-1.000000)
+AxisMappings=(AxisName="MoveForward",Key=W,Scale=1.000000)
+AxisMappings=(AxisName="MoveForward",Key=S,Scale=-1.000000)
+AxisMappings=(AxisName="MoveForward",Key=Up,Scale=1.000000)
+AxisMappings=(AxisName="MoveForward",Key=Down,Scale=-1.000000)
+AxisMappings=(AxisName="MoveForward",Key=Gamepad_LeftY,Scale=1.000000)
+AxisMappings=(AxisName="MoveRight",Key=A,Scale=-1.000000)
+AxisMappings=(AxisName="MoveRight",Key=D,Scale=1.000000)
+AxisMappings=(AxisName="MoveRight",Key=Gamepad_LeftX,Scale=1.000000)
+AxisMappings=(AxisName="TurnRate",Key=Gamepad_RightX,Scale=1.000000)
+AxisMappings=(AxisName="TurnRate",Key=Left,Scale=-1.000000)
+AxisMappings=(AxisName="TurnRate",Key=Right,Scale=1.000000)
+AxisMappings=(AxisName="Turn",Key=MouseX,Scale=1.000000)
+AxisMappings=(AxisName="LookUpRate",Key=Gamepad_RightY,Scale=1.000000)
+AxisMappings=(AxisName="LookUp",Key=MouseY,Scale=-1.000000)
+AxisMappings=(AxisName="YawRight",Key=E,Scale=1.000000)
+AxisMappings=(AxisName="YawRight",Key=Q,Scale=-1.000000)
+AxisMappings=(AxisName="Throttle",Key=LeftShift,Scale=1.000000)
+AxisMappings=(AxisName="Throttle",Key=LeftControl,Scale=-1.000000)
+AxisMappings=(AxisName="Throttle",Key=Gamepad_LeftTrigger,Scale=-1.000000)
+AxisMappings=(AxisName="Throttle",Key=Gamepad_RightTrigger,Scale=1.000000)
+AxisMappings=(AxisName="YawRight",Key=Gamepad_RightX,Scale=1.000000)
+AxisMappings=(AxisName="Throttle",Key=Gamepad_RightY,Scale=-1.000000)
bAlwaysShowTouchInterface=False
bShowConsoleOnFourFingerTap=True
DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks
ConsoleKey=None
-ConsoleKeys=Tilde
+ConsoleKeys=Tilde


  1. Based on the logic above, your download probably does not contain DefaultEngine.ini config file either. The only relevant section of that ini is Engine.PhysicsSettings section. Aerocomp is using built in physics system. This system may get impacted by variable FPS. In order to make results replicate on various FPS the project should have physics sub-step enabled. You may choose to do that on your own terms OR copy below code and replace relevant section in your own DefaultEngine.ini

[/Script/Engine.PhysicsSettings]
DefaultGravityZ=-980.000000
DefaultTerminalVelocity=4000.000000
DefaultFluidFriction=0.300000
RagdollAggregateThreshold=4
TriangleMeshTriangleMinAreaThreshold=5.000000
bEnableAsyncScene=False
bEnable2DPhysics=False
LockedAxis=None
FrictionCombineMode=Average
MaxDepenetrationVelocity=0.000000
bSimulateSkeletalMeshOnDedicatedServer=True
MaxPhysicsDeltaTime=0.200000
bSubstepping=True
bSubsteppingAsync=False
MaxSubstepDeltaTime=0.001600
MaxSubsteps=12
SyncSceneSmoothingFactor=0.330000
AsyncSceneSmoothingFactor=0.990000
InitialAverageFrameRate=0.030000

  1. DefaultInput and DefaultEngine ini files can now be found in 4.11 compatible version under ConfigINI folder
  2. There is a bug with SpringArm that I reported on AnswerHuband this thread. See either for details. I decided to leave the the SpringArm in, hoping that the bug will be fixed soon. (EDIT: SHOULD BE FIXED NOW)