Announcement

Collapse
No announcement yet.

[Community Project] WIP Weather & Ocean Water Shader

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • @TK-Master - you are the man! This update is sweeet.

    Infinite ocean system is one I've been looking forward to for a while even though I mostly need it for a lower-priority project.
    Storyteller - An immersive VR audiobook player

    Dungeon Survival - WIP First person dungeon crawler with a focus on survival and environmental gameplay ala roguelikes

    Comment


    • Glad you enjoy

      Today I made a simple boat wake test.

      Click image for larger version

Name:	BoatWakeTest.jpg
Views:	1
Size:	188.4 KB
ID:	1080020

      It basically spawns planes with the same gerstner wave displacement on top of the ocean (you can think of it as decals).
      It doesn't look that great right now but I think with a proper material it might just look believable.

      The main problem is that the ocean is not being displaced by the boat, if only we could combine this with something like the fluid surface plugin... *keeps dreaming*

      4.10 Update! -> [Community Project] WIP Weather & Ocean Water Shader
      WIP Interactive Water Shader, WIP 2D Water Sim
      WIP FFT Ocean w/ Foam, Quad-tree Infinite Ocean LOD

      Comment


      • Code:
        In file included from ../../../../Unreal Projects/OceanProject/Plugins/OceanPlugin/Intermediate/Build/Linux/x86_64-unknown-linux-gnu/UE4Editor/Inc/OceanPlugin/OceanPlugin.generated.dep.h:30:
        ../../../../Unreal Projects/OceanProject/Plugins/OceanPlugin/Source/OceanPlugin/Classes/Fish/FlockFish.h:115:25: error: implicit conversion of NULL constant to 'float' [-Werror,-Wnull-conversion]
                float CustomZSeekMin = NULL;
                                     ~ ^~~~
                                       0.0
        I am curious as to why you use NULL instead of just 0.0?

        Comment


        • Fantastic guys, you guys deserved a medal, this one is really production ready for the infinite ocean system and the ssr! great job!

          Comment


          • I've tried two things for wakes.

            I tried a particle ribbon approach where the particle's material was also displaced with the gerstner wave.

            I also tried keeping a collection of points (location/time/direction) and drawing to a canvas that is then rendered into the main material. Drawing to the canvas was a bit slow once the point collection grew. I also only showed wakes 100m around the camera. This did have the ability to displace the main waves though and actually create the triangle wave following the boat.

            Click image for larger version

Name:	Wake.png
Views:	1
Size:	171.8 KB
ID:	1080113

            But I was never happy with any on this.
            Attached Files
            Last edited by Handkor; 06-19-2015, 08:29 AM.

            Comment


            • This by far is an awesome project and open source thanks you!
              The waves can sync over network games like in BF4 ?
              Hevedy - Image Tools: https://hevedy.itch.io/imagetools

              Comment


              • Originally posted by bzinventor
                PS. I found an issue with the steering - it causes jitter. You have to be out of steering mode to see the problem. Look at character feet.
                Now if you disable the torgue for steering, it doesn't have the problem.
                You mean the war ship steering? yeah unfortunately there are a lot of problems with it, not just with steering.
                The problem is that I'm using complex collision (per-poly) and that doesn't work very well with physics.. complex collision is not meant to be movable it seems.

                It's not the torgue.

                I made a topic about this problem which shows the jittering problem (that was from 4.7, in 4.8 it only has gotten worse )
                https://forums.unrealengine.com/show...hysics-problem

                Originally posted by Hevedy View Post
                The waves can sync over network games like in BF4 ?
                Yes, I have already implemented a way to sync the waves (check out the custom vehicle controller and BP_Ocean).
                All it does is get the time difference between the server and client and then add a time offset on the shader and ocean manager (on the client).

                I haven't done any extensive testing and I don't know if it's that accurate but it looks like it works

                Originally posted by Handkor View Post
                I've tried two things for wakes.

                I tried a particle ribbon approach where the particle's material was also displaced with the gerstner wave.

                I also tried keeping a collection of points (location/time/direction) and drawing to a canvas that is then rendered into the main material. Drawing to the canvas was a bit slow once the point collection grew. I also only showed wakes 100m around the camera. This did have the ability to displace the main waves though and actually create the triangle wave following the boat.

                [ATTACH=CONFIG]44245[/ATTACH]

                But I was never happy with any on this.
                Hey Handkor! good to see you around

                That sounds super interesting how do you go about displacing the main waves exactly?
                I would love to take a look at your implementation (if you want to share)! sounds like it would work fine for a single boat at least.

                4.10 Update! -> [Community Project] WIP Weather & Ocean Water Shader
                WIP Interactive Water Shader, WIP 2D Water Sim
                WIP FFT Ocean w/ Foam, Quad-tree Infinite Ocean LOD

                Comment


                • Problems with Packaging project in 4.7.6

                  Hello,
                  Impressive job with this project.
                  I am not a coder so I don't think I can contribute with code to this, maybe with 3D assets.
                  I have an issue with the plugin. It plays in the editor ... but it does not package on my 4.7 version. Is there a special way to install this package ? Apart for the usual copy paste of the Plugin folder and then build the C++ project.

                  The error part of the Log looks like this:

                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: A:\PROJECTS\Unreal Projects\TheOld\Plugins\OceanPlugin\Source\OceanPlugin\Private\Terrain\TerrainGenerationWorker.cpp(31) : warning C4996: 'FRunnableThread::Create': Function deprecated. Use FRunnableThread::Create without bAutoDeleteSelf
                  MainFrameActions: Packaging (Windows (64-bit)): and bAutoDeleteRunnable params and delete thread and runnable manually. Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: A:\Epic Games\4.7\Engine\Source\Runtime\Core\Public\HAL\ThreadingBase.h(263) : see declaration of 'FRunnableThread::Create'
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: FlockFish.cpp
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: BuoyancyMovementComponent.cpp
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: BuoyancyComponent.cpp
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: FishState.cpp
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: FishFactory.cpp
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: OceanManager.cpp
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: [26/27] Link OceanPlugin-Win64-DebugGame-Static.lib
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: [27/27] Link TheOld-Win64-DebugGame.exe
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: Creating library A:\PROJECTS\Unreal Projects\TheOld\Binaries\Win64\TheOld-Win64-DebugGame.lib and object A:\PROJECTS\Unreal Projects\TheOld\Binaries\Win64\TheOld-Win64-DebugGame.exp
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: UELinkerFixups.cpp.obj : error LNK2019: unresolved external symbol "void __cdecl EmptyLinkFunctionForStaticInitializationOceanPlugin(void)" (?EmptyLinkFunctionForStaticInitializationOceanPlugin@@YAXXZ) referenced in function "void __cdecl UELinkerFixups(void)" (?UELinkerFixups@@YAXXZ)
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: A:\PROJECTS\Unreal Projects\TheOld\Binaries\Win64\TheOld-Win64-DebugGame.exe : fatal error LNK1120: 1 unresolved externals
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: -------- End Detailed Actions Stats -----------------------------------------------------------
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: ERROR: UBT ERROR: Failed to produce item: A:\PROJECTS\Unreal Projects\TheOld\Binaries\Win64\TheOld-Win64-DebugGame.exe
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: Cumulative action seconds (8 processors): 0,00 building projects, 65,63 compiling, 0,00 creating app bundles, 0,00 generating debug info, 3,14 linking, 0,00 other
                  MainFrameActions: Packaging (Windows (64-bit)): UnrealBuildTool: UBT execution time: 45,46 seconds
                  MainFrameActions: Packaging (Windows (64-bit)): CommandUtils.Run: Run: Took 45,6186092s to run UnrealBuildTool.exe, ExitCode=2
                  MainFrameActions: Packaging (Windows (64-bit)): ErrorReporter.Error: ERROR: AutomationTool error: Command failed (Result:2): A:\Epic Games\4.7\Engine\Binaries\DotNET\UnrealBuildTool.exe TheOld Win64 DebugGame "A:\PROJECTS\Unreal Projects\TheOld\TheOld.uproject" -noxge -rocket -NoHotReloadFromIDE. See
                  MainFrameActions: Packaging (Windows (64-bit)): logfile for details: 'UnrealBuildTool.txt'
                  MainFrameActions: Packaging (Windows (64-bit)): BuildCommand.Execute: ERROR: BUILD FAILED
                  MainFrameActions: Packaging (Windows (64-bit)): Program.Main: ERROR: AutomationTool terminated with exception:
                  MainFrameActions: Packaging (Windows (64-bit)): Program.Main: ERROR: Exception in AutomationTool: Command failed (Result:2): A:\Epic Games\4.7\Engine\Binaries\DotNET\UnrealBuildTool.exe TheOld Win64 DebugGame "A:\PROJECTS\Unreal Projects\TheOld\TheOld.uproject" -noxge -rocket -NoHotReloadFromIDE. See
                  MainFrameActions: Packaging (Windows (64-bit)): logfile for details: 'UnrealBuildTool.txt'
                  MainFrameActions: Packaging (Windows (64-bit)): Stacktrace: at AutomationTool.CommandUtils.RunAndLog(String App, String CommandLine, String Logfile, Int32 MaxSuccessCode, String Input, ERunOptions Options, Dictionary`2 EnvVars)
                  MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.CommandUtils.RunUBT(CommandEnvironment Env, String UBTExecutable, String CommandLine, String LogName, Dictionary`2 EnvVars)
                  MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.UE4Build.BuildWithUBT(String ProjectName, String TargetName, UnrealTargetPlatform TargetPlatform, String Config, String UprojectPath, Boolean ForceMonolithic, Boolean ForceNonUnity, Boolean ForceDebugInfo, Boolean ForceFlushMac, Boolean DisableXGE, String InAddArgs, Boolean ForceUnity, Dictionary`2 EnvVars)
                  MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.UE4Build.Build(BuildAgenda Agenda, Nullable`1 InDeleteBuildProducts, Boolean InUpdateVersionFiles, Boolean InForceNoXGE, Boolean InForceNonUnity, Boolean InForceUnity, Dictionary`2 PlatformEnvVars)
                  MainFrameActions: Packaging (Windows (64-bit)): at Project.Build(BuildCommand Command, ProjectParams Params, Int32 WorkingCL)
                  MainFrameActions: Packaging (Windows (64-bit)): at BuildCookRun.DoBuildCookRun(ProjectParams Params)
                  MainFrameActions: Packaging (Windows (64-bit)): at BuildCommand.Execute()
                  MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.Automation.Execute(List`1 CommandsToExecute, CaselessDictionary`1 Commands)
                  MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.Automation.Process(String[] CommandLine)
                  MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.Program.MainProc(Object Param)
                  MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.InternalUtils.RunSingleInstance(MainProc Main, Object Param)
                  MainFrameActions: Packaging (Windows (64-bit)): at AutomationTool.Program.Main()
                  MainFrameActions: Packaging (Windows (64-bit)): Program.Main: ERROR: Command failed (Result:2): A:\Epic Games\4.7\Engine\Binaries\DotNET\UnrealBuildTool.exe TheOld Win64 DebugGame "A:\PROJECTS\Unreal Projects\TheOld\TheOld.uproject" -noxge -rocket -NoHotReloadFromIDE. See logfile for details: 'UnrealBuildTool.txt'
                  MainFrameActions: Packaging (Windows (64-bit)): ProcessManager.KillAll: Trying to kill 0 spawned processes.
                  MainFrameActions: Packaging (Windows (64-bit)): Program.Main: AutomationTool exiting with ExitCode=2
                  MainFrameActions: Packaging (Windows (64-bit)): Domain_ProcessExit
                  MainFrameActions: Packaging (Windows (64-bit)): ProcessManager.KillAll: Trying to kill 0 spawned processes.
                  MainFrameActions: Packaging (Windows (64-bit)): copying UAT log files...
                  MainFrameActions: Packaging (Windows (64-bit)): RunUAT.bat ERROR: AutomationTool was unable to run successfully.
                  MainFrameActions: Packaging (Windows (64-bit)): BUILD FAILED

                  Comment


                  • Does infinite plane work in this 4.8 release or are you adding ti in?
                    Interested in having someone review your game? want to do an interview on it?

                    This check out this website.

                    Working on a game as well.

                    Comment


                    • Originally posted by Vladone View Post
                      I have an issue with the plugin. It plays in the editor ... but it does not package on my 4.7 version. Is there a special way to install this package ? Apart for the usual copy paste of the Plugin folder and then build the C++ project.

                      The error part of the Log looks like this:
                      I don't see any plugin error from this log, the TerrainGenerationWorker.cpp(31) warning does not prevent from building the project.
                      I cannot replicate this problem no mater what I try, I can package the plugin just fine even when I add to another project.

                      Which version of the plugin are you using (don't use master branch)? also what are the exact steps you take to package your project? can you package the project without the plugin?

                      Originally posted by Uprentiss View Post
                      Does infinite plane work in this 4.8 release or are you adding ti in?
                      It works
                      However I found a bug with it just yesterday, basically it will cause a crash if your character goes below the level's kill Z.
                      I have already fixed it but for now just make sure he doesn't I will update the github branch soon.

                      4.10 Update! -> [Community Project] WIP Weather & Ocean Water Shader
                      WIP Interactive Water Shader, WIP 2D Water Sim
                      WIP FFT Ocean w/ Foam, Quad-tree Infinite Ocean LOD

                      Comment


                      • Originally posted by TK-Master View Post

                        Hey Handkor! good to see you around

                        That sounds super interesting how do you go about displacing the main waves exactly?
                        I would love to take a look at your implementation (if you want to share)! sounds like it would work fine for a single boat at least.
                        I meant just adds to the displacement output, not to GetWaveHeight.

                        For the canvas approach I accumulate every boats trace. The green channel is for foam and the red channel is for displacement. Each wake point draws a rectangle that grows over time making the wake stretch out.

                        Click image for larger version

Name:	WakeBuffer.png
Views:	1
Size:	54.6 KB
ID:	1080146

                        The main ocean material get a extra wake section that adds to the normal, displacement and foam lerp to the color.

                        Click image for larger version

Name:	WakeMaterial.png
Views:	1
Size:	278.5 KB
ID:	1080147

                        The wake is updated every frame with this code

                        Code:
                        void AOceanManager::UpdateWakeBuffer(float time)
                        {
                        	if (!WakeTexture)
                        		return;
                        
                        	float maxAge = 10;
                        
                        	if (WakeCanvas == nullptr && WakeRenderTarget != NULL)
                        	{
                        		WakeCanvas = new FCanvas(WakeRenderTarget->GameThread_GetRenderTargetResource(), NULL, GetWorld(),ERHIFeatureLevel::SM5);
                        		WakeCanvas->Clear(FLinearColor::Transparent);
                        	}
                        
                        
                        	WakeCanvas->Clear(FLinearColor::Transparent);
                        	for (int index = WakeList.Num() - 1; index >= 0; index--)
                        	{
                        		FVector location = (WakeList[index].Location / Size) + 0.5f - (Center / Size);
                        
                        		//WakeCanvas->DrawTile(5, 5, 245, 245, 0, 0, 1, 1, FLinearColor::Red);
                        
                        		float age = (time - WakeList[index].TimeStamp) / maxAge;
                        		float inverseAge = 1.0f - age;
                        		float WakeStartSize = WakeList[index].Size;
                        
                        		FVector2D shockwaveWakeSize = FVector2D(0.75f * WakeStartSize / Size, ( 0.75f * WakeStartSize / Size)/* * (1 + (2 * maxAge * age))*/);
                        		FVector2D wakeCenter = FVector2D((location.X - shockwaveWakeSize.X * 0.5f) * WakeRenderTarget->SizeX, (location.Y - shockwaveWakeSize.Y * 0.5f) * WakeRenderTarget->SizeY);
                        		FCanvasTileItem tile(wakeCenter,
                        			WakeTexture->Resource,
                        			FVector2D(shockwaveWakeSize.X* WakeRenderTarget->SizeX, shockwaveWakeSize.Y* WakeRenderTarget->SizeY),
                        			FVector2D(0, 0),
                        			FVector2D(1, 1),
                        			FLinearColor(inverseAge, inverseAge, inverseAge, 1));
                        		tile.BlendMode = ESimpleElementBlendMode::SE_BLEND_Additive;
                        		tile.PivotPoint = FVector2D(0.5f, 0.5f);
                        		tile.Rotation = WakeList[index].Rotation;
                        
                        		// Shockwave
                        		tile.SetColor(FLinearColor::Red * inverseAge);
                        		FVector2D wakeDelta = FVector2D(WakeList[index].Right.X * WakeRenderTarget->SizeX, WakeList[index].Right.Y * WakeRenderTarget->SizeY) *(WakeList[index].Velocity.Size2D() * 2 / Size) * age;
                        		tile.Position = wakeCenter + wakeDelta;
                        		WakeCanvas->DrawItem(tile);
                        		tile.Position = wakeCenter - wakeDelta;
                        		WakeCanvas->DrawItem(tile);
                        
                        		//Turbulence
                        		tile.SetColor(FLinearColor::Green * inverseAge);
                        		FVector2D turbulenceWakeSize = FVector2D(WakeStartSize / Size, (WakeStartSize / Size)) * (1 + (3 * age));
                        		tile.Position = FVector2D((location.X - turbulenceWakeSize.X * 0.5f) * WakeRenderTarget->SizeX, (location.Y - turbulenceWakeSize.Y * 0.5f) * WakeRenderTarget->SizeY);
                        		tile.Size = FVector2D(turbulenceWakeSize.X* WakeRenderTarget->SizeX, turbulenceWakeSize.Y* WakeRenderTarget->SizeY);
                        		tile.Texture = TurbulenceTexture->Resource;
                        		WakeCanvas->DrawItem(tile);
                        
                        		if (age >= 1.0f)
                        		{
                        			WakeList.RemoveAt(index, 1);
                        		}
                        	}
                        
                        	WakeCanvas->Flush_GameThread();
                        
                        }
                        I am not very fond of this implementation though.
                        Last edited by Handkor; 06-19-2015, 08:46 PM.

                        Comment


                        • Originally posted by TK-Master View Post
                          I made a topic about this problem which shows the jittering problem (that was from 4.7, in 4.8 it only has gotten worse )
                          https://forums.unrealengine.com/show...hysics-problem
                          I suggest trying the new HACD collision volume gen on the ship - I bet it can give you a reasonable approximation if you set it to be able to use enough hulls. That should be better than using "complex as simple" which isn't great for a lot of reasons.
                          Storyteller - An immersive VR audiobook player

                          Dungeon Survival - WIP First person dungeon crawler with a focus on survival and environmental gameplay ala roguelikes

                          Comment


                          • Originally posted by Handkor View Post
                            I meant just adds to the displacement output, not to GetWaveHeight.

                            For the canvas approach I accumulate every boats trace. The green channel is for foam and the red channel is for displacement. Each wake point draws a rectangle that grows over time making the wake stretch out.

                            The main ocean material get a extra wake section that adds to the normal, displacement and foam lerp to the color.

                            The wake is updated every frame with this code

                            Code:
                            void AOceanManager::UpdateWakeBuffer(float time)
                            {
                            	if (!WakeTexture)
                            		return;
                            
                            	float maxAge = 10;
                            
                            	if (WakeCanvas == nullptr && WakeRenderTarget != NULL)
                            	{
                            		WakeCanvas = new FCanvas(WakeRenderTarget->GameThread_GetRenderTargetResource(), NULL, GetWorld(),ERHIFeatureLevel::SM5);
                            		WakeCanvas->Clear(FLinearColor::Transparent);
                            	}
                            
                            
                            	WakeCanvas->Clear(FLinearColor::Transparent);
                            	for (int index = WakeList.Num() - 1; index >= 0; index--)
                            	{
                            		FVector location = (WakeList[index].Location / Size) + 0.5f - (Center / Size);
                            
                            		//WakeCanvas->DrawTile(5, 5, 245, 245, 0, 0, 1, 1, FLinearColor::Red);
                            
                            		float age = (time - WakeList[index].TimeStamp) / maxAge;
                            		float inverseAge = 1.0f - age;
                            		float WakeStartSize = WakeList[index].Size;
                            
                            		FVector2D shockwaveWakeSize = FVector2D(0.75f * WakeStartSize / Size, ( 0.75f * WakeStartSize / Size)/* * (1 + (2 * maxAge * age))*/);
                            		FVector2D wakeCenter = FVector2D((location.X - shockwaveWakeSize.X * 0.5f) * WakeRenderTarget->SizeX, (location.Y - shockwaveWakeSize.Y * 0.5f) * WakeRenderTarget->SizeY);
                            		FCanvasTileItem tile(wakeCenter,
                            			WakeTexture->Resource,
                            			FVector2D(shockwaveWakeSize.X* WakeRenderTarget->SizeX, shockwaveWakeSize.Y* WakeRenderTarget->SizeY),
                            			FVector2D(0, 0),
                            			FVector2D(1, 1),
                            			FLinearColor(inverseAge, inverseAge, inverseAge, 1));
                            		tile.BlendMode = ESimpleElementBlendMode::SE_BLEND_Additive;
                            		tile.PivotPoint = FVector2D(0.5f, 0.5f);
                            		tile.Rotation = WakeList[index].Rotation;
                            
                            		// Shockwave
                            		tile.SetColor(FLinearColor::Red * inverseAge);
                            		FVector2D wakeDelta = FVector2D(WakeList[index].Right.X * WakeRenderTarget->SizeX, WakeList[index].Right.Y * WakeRenderTarget->SizeY) *(WakeList[index].Velocity.Size2D() * 2 / Size) * age;
                            		tile.Position = wakeCenter + wakeDelta;
                            		WakeCanvas->DrawItem(tile);
                            		tile.Position = wakeCenter - wakeDelta;
                            		WakeCanvas->DrawItem(tile);
                            
                            		//Turbulence
                            		tile.SetColor(FLinearColor::Green * inverseAge);
                            		FVector2D turbulenceWakeSize = FVector2D(WakeStartSize / Size, (WakeStartSize / Size)) * (1 + (3 * age));
                            		tile.Position = FVector2D((location.X - turbulenceWakeSize.X * 0.5f) * WakeRenderTarget->SizeX, (location.Y - turbulenceWakeSize.Y * 0.5f) * WakeRenderTarget->SizeY);
                            		tile.Size = FVector2D(turbulenceWakeSize.X* WakeRenderTarget->SizeX, turbulenceWakeSize.Y* WakeRenderTarget->SizeY);
                            		tile.Texture = TurbulenceTexture->Resource;
                            		WakeCanvas->DrawItem(tile);
                            
                            		if (age >= 1.0f)
                            		{
                            			WakeList.RemoveAt(index, 1);
                            		}
                            	}
                            
                            	WakeCanvas->Flush_GameThread();
                            
                            }
                            I am not very fond of this implementation though.
                            Wow.. I would have not though of that to be honest.. thanks for sharing your method

                            This gives me a few ideas, I will report back if manage to make it work

                            Originally posted by n00854180t View Post
                            I suggest trying the new HACD collision volume gen on the ship - I bet it can give you a reasonable approximation if you set it to be able to use enough hulls. That should be better than using "complex as simple" which isn't great for a lot of reasons.
                            Unfortunately no, the new convex collision generator is much better but there is no way it can ever handle the interior of a ship, it's too complex for automatic collision plus even if it could it's too inefficient, it would be an extreme amount of collision primitives (not good for performance).

                            The only alternative that I see right now is to manually place/scale collision shapes inside the SM editor, but it's a bit lengthy process.

                            Kinda like this (a quick test I made a while ago entirely by boxes and couple of capsules):

                            But this only worked because it's a much simpler/smaller ship, without interior

                            Also using per-poly collision turns out to not only be accurate but it's also better performance wise, the only problem is the jittery physics.

                            4.10 Update! -> [Community Project] WIP Weather & Ocean Water Shader
                            WIP Interactive Water Shader, WIP 2D Water Sim
                            WIP FFT Ocean w/ Foam, Quad-tree Infinite Ocean LOD

                            Comment


                            • Hi my hero,
                              You are just super cool when creating this plugin for UE community.
                              I tried and found this plugin not working well with UE4.8 integrated with Nvidia GameWorks (guess due to VXGI) the ocean surface looks like missing shader. But this one works pretty well with UE4.8 not integrate with GameWork. Any ideas to deal with this?

                              Another one, I feel if the shore gets wet when the wave chopping to the shore, it's kind of wet map, it's definitely a big thumb up


                              Click image for larger version

Name:	issue.jpg
Views:	1
Size:	394.3 KB
ID:	1080240
                              Attached Files
                              Last edited by trungswat; 06-21-2015, 10:01 AM.

                              Comment


                              • Hi,

                                I have some questions about this plugin. I want to make a game with ship, so this it perfect.
                                1. Am I free to use it in my own project and maybe distribute it in my game (if it becomes a cool game)?
                                2. When I try to download the files, they all are .uasset-files, but I can't import them. How do you do this?

                                I hope to hear anything soon, becaue this project is really cool!
                                Check out my ARK Mod Play As Dino!

                                Comment

                                Working...
                                X