Line of Sight Visualization is a 100% blueprint-powered framework created in Unreal Engine. Built with a primary focus on modularity and ease of use, the system can be easily added to game characters for an accurate representation of their Line of Sight zones.
Edge Detection algorithms help deliver increased performance
Customize & preview the visualization in the editor
Smooth visualization support for non-cuboid shapes
Component driven design ensures a quick & easy integration process
Sample maps showcase examples for both player & AI LoS
Fully commented Blueprints to accelerate the learning process
Number of Blueprints: 7 (including widgets & examples) Input: Mouse & Keyboard Network Replicated: No Supported Development Platforms: Windows Supported Target Build Platforms: Windows Documentation: Fully Commented; Examples Included
As a fan of the original F.E.A.R. growing up, it would have been really awesome if that were the case. But this system is using a procedural mesh driven approach instead of lighting models, with a focus on the performance benefits brought about by edge detection over brute force approaches. So I don’t imagine it being of much use as an alternative to lighting systems in FPS & TPS games.
Hi, I just tested out the visualization on the new v4.22 edition of Unreal Engine & everything seems to be working fine. You can go ahead and download the v4.22 files from the launcher now.
If you’re upgrading your project from 4.21 to 4.22, it should run smoothly without having to make any changes. If anyone’s having trouble with the process, feel free to contact me.
Also, LoS Visualization is now 20% off as part of the UE4 Spring Sale.
Hi, Line of Sight Visualization will be available at a discounted price (30% off) during this week. So if you missed it during the Spring Sale earlier this month, you can get it now at: https://www.unrealengine.com/marketp…-visualization.
Hello, I’ve integrated this into the twin stick shooter example project but the pawn (spaceship) is a static mesh, is there any reason why that would cause this to not work? Setup was really easy and straightforward, so I’m confused why I don’t see it working. I did the optional setup in construction script so I could preview it but even that isn’t working. Using engine version 4.22.1
Hi, I’m assuming that you sent me a mail yesterday regarding the same issue. I was able to replicate the issue at my end and have sent you the solution, but I’ll share it here for others who might have run into the same problem.
The v1.1 update had added 360-degree rotational freedom for the visualization system (so that you could use it not just in top-down, but also in other cases like sidescrollers). As part of this feature, a new output parameter ‘Up Vector’ was introduced in Step 4 of the integration tutorial. The above issue can be solved by connecting a ‘Get Actor Up Vector’ node to the new output parameter as shown below:
Does this use UProceduralMeshComponent? I ask because when building out a similar system to this in the past which used UProceduralMeshComponent and ran into a problem where if you we’re constantly moving, and updating the component, the component’s collisions did not bake on the same frame that the updates were made (but were disposed of earlier). The problem with this was that while moving you were unable to gather any collision data which you might use for things like what actors can this user actually “see” and render/hide them accordingly.
Even if UProceduralMeshComponent is uses does that issue exist in your system, because if not I’d consider just buying it to solve that problem rather than hitting my head against a wall anymore (that and the ray-trace edge detection optimizations do sound nice!).
Hi, I’m using the Procedural Mesh Component as well, but its collision has been turned off since obstacle detection is handled through ray traces. So it might not be of much help to you in this scenario. But I did run into a similar issue as yours when it came to updating the mesh itself. There was a slight lag in the procedural mesh vertex updates, but this was solved by setting the update tick group to PostUpdateWork (https://docs.unrealengine.com/en-US/…tml#tickgroups).
So I’d say that changing the tick group might be worth a try in your case as well. If you’re lucky, that could solve your collision lag. Just make sure to do so for both the component as well as its owning actor.
Also, on a side note, if you have a lot of vertices that get updated every frame, I’m not sure how efficient it would be use the collision on proc mesh component. Using normal line traces to detect actors around you might be less taxing on the processor.
Hi @TROPICALRECON , I wouldn’t recommend it for third-person shooters since this is a planar visualization system. It’s best suited for top-down/isometric and sidescroller games, where a 2D portrayal of line of sight gets the job done instead of having to rely on 3D vision cones.
The v1.2 update is now available on the Marketplace.
New Features:
Added support for an additional short-range 360 degree visualization outside the primary vision cone.
Unreal Engine | Line of Sight Visualization v1.2 | Peripheral LoS Visualization - YouTube
For those of you who’re using the previous editions and want to add the new peripheral LoS Visualization to your projects, replace your LoSVisualizer components with the new version provided in this update, and follow the steps starting from 0:20 in the above video. You should be able to get it up and running in a matter of minutes.
Apart from that, you can also control the radius of the short-range vision through the **PeripheralLoSRadius **parameter as shown below:
II. Now add the following nodes at the start of this graph. Since we want to change the color of the material at runtime, we’re going to create a dynamic material instance using the default material as a base.
I was also wondering, can the visualization angle & radius be changed during runtime also?
I have tried modyfiying the angle & radius at runtime but it doesnt seem to make the visualization change in size from its inital size.
Is there a function I can call to force an update?