Search Unity

  1. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Official Water System for the High Definition Render Pipeline

Discussion in 'High Definition Render Pipeline' started by auzaiffe, Nov 26, 2021.

  1. FrostApps

    FrostApps

    Joined:
    Dec 15, 2014
    Posts:
    39
    Hi,

    I tried several times to compile the demo. I can't solve the "Assets migration" problem, and none of the qualities work for the compilation.

    https://github.com/Unity-Technologies/WaterScenes

    Tested:
    • 2023.1.0f1
    • 2023.1.3f1
    Sem título.png

    BuildFailedException: GraphicSetting's HDRenderPipelineAsset Assets/WaterSystemDemo/Settings/HDRPDefaultResources/HDRenderPipelineAsset.asset is a non updated asset. Please use HDRP wizard to fix it.
    UnityEditor.Rendering.HighDefinition.HDRPPreprocessBuild.OnPreprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at ./Library/PackageCache/com.unity.render-pipelines.high-definition@15.0.6/Editor/BuildProcessors/HDRPPreprocessBuild.cs:70)
    UnityEditor.Build.BuildPipelineInterfaces+<>c__DisplayClass16_0.<OnBuildPreProcess>b__1 (UnityEditor.Build.IPreprocessBuildWithReport bpp) (at <c069d6dd98084e0ba1603c039014d6ba>:0)
    UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List`1[T] oneInterfaces, System.Action`1[T] invocationOne, System.Collections.Generic.List`1[T] twoInterfaces, System.Action`1[T] invocationTwo, System.Boolean exitOnFailure) (at <c069d6dd98084e0ba1603c039014d6ba>:0)
    UnityEditor.BuildPlayerWindow:BuildPlayerAndRun()
     
  2. MichielVanOmmen

    MichielVanOmmen

    Joined:
    Feb 12, 2019
    Posts:
    6
    Hello everyone!
    Just to start with: Out of the box, the water feature works really well in most cases. And with the settings to allow some control on performance is also grand. Would always prefer having even more control if possible. I already realised that the various types (pond, river, etc.) are basically presets with some costly features removed, much appreciated.
    Though we haven't yet really tested how easy it is to use it for gameplay functionality.

    However, I did notice couple of issues / restrictions. Not sure if they have been already addressed here, I just bring them up again.
    1. Now that ECS is finally out of preview, will there be a plan to include the water shader into the ECS hybrid rendering? As in, be able to place water sources inside subscenes and not have them disappear because the ECS subscene converted removes the scripts that it doesn't know of. Or do we have to make sure Water surfaces are never in ECS?
    2. Light sources under the water have a nice subsurface-like effect, however there seems to be a shading issue or a calculation restriction as the area right above the lightsource is missing the light influence. Is that going to be addressed in the future or will that remain an unsolvable problem?
      And I guess this light shading is also referencing the volumetric fog - which also disappears at the distance depending how far the fog distance is setup.
     

    Attached Files:

    chap-unity likes this.
  3. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    Hey, i was able to look at the bug today. I fixed an issue with XR but i doubt it's the one you are experiencing (the right eye was not applying water absorption correctly) upload_2023-7-24_16-6-8.png

    Could you share a screenshot of your issue if it's not this one ?
     
  4. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    Thanks for reporting, i pushed a fix on the demo project and i'll try to fix the wizard hdrp side too
     
  5. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    I fixed the second issue, thanks for reporting.
    About the first one, i don't know enough about ECS to answer, sorry about that
     
    FrostApps and shikhrr like this.
  6. m4robb

    m4robb

    Joined:
    Aug 2, 2017
    Posts:
    38
    Hi Adrien, thanks! this looks like what is happening for me. Is this what you fixed? How can I access the patch?
     
    Last edited: Aug 1, 2023
  7. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    I am currently backporting the fix to all versions so it should be available in a few days/weeks
     
  8. chap-unity

    chap-unity

    Unity Technologies

    Joined:
    Nov 4, 2019
    Posts:
    755
    There's currently a PR in flight that actually help with this. The goal is to re-use the last information from the GPU sim, so you'll be able to get the water height at a position without having to run the CPU sim, the only downside is that there's a few frames delay (from 1 to 4) so it's not 100% accurate, but from our tests it's good enough for lots of cases given the cost saving.

    So what you can do here is get the normal information (by calculating a normal from 3 world position sample for example) and then "push" objects around based on the slope information of the normal, the wind and weight of the object for example.

    We are currently trying to add a small buyoncy script (with rigidbody and normal calculation) on the Package sample so that you guys can have a headstart on this.
     
    Jack_Martison likes this.
  9. L_tD

    L_tD

    Joined:
    Mar 8, 2017
    Posts:
    39
    Hi,
    I'm using the first time the new water system and it looks very promising to me, but are there any documents or tutorials to archive the following effects with the water system? I'm using Unity 2023.1.3f1

    - Contact foam with shoreline or environment objects (like rocks, etc.) if they are in the water?
    - Ripples and foam of entities who are moving through the water like characters or boats?
    - Reflection of the sky and characters if the water is very calm?

    Thanks in advanced for helping.

    Best
    L_tD
     
    rgb_45 likes this.
  10. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    Check this post for more links to resources https://forum.unity.com/threads/wat...n-render-pipeline.1203751/page-9#post-8893374

    For your questions:
    - There is an example of that in the samples scenes you can find in the package manager. This is done through a custom shadergraph
    - You can do that with a water deformer and a foam generator
    - This is done automatically, you can put a reflection probe if you want to have perfect reflections, otherwise it reflects static sky and ssr if enabled
     
    L_tD and chap-unity like this.
  11. BanzBowinkel

    BanzBowinkel

    Joined:
    Jun 17, 2015
    Posts:
    16
    Hi all, has anyone succeeded to rotate the water surface?
    I know it's an odd question but our VR-experience is about "bending" reality and hence it incorporates a watersurface that's not horizontal. But the water always displays horizontal no matter how I rotate its GameObject or the displaying volume.
    it is not the common usecase - I know - but I thought I'd giv it a try here...

    Thanks and best!
     
  12. seoyeon222222

    seoyeon222222

    Joined:
    Nov 18, 2020
    Posts:
    173
    Hello
    I think a similar question has been posted here before,
    I would like to ask if there has been any progress or if there is any information I have missed.
    After all, my purpose is to create an environment like an aquarium.
    Image_199.png Image_200.png Image_201.png


    How can I see the Underwater effect from the outside?
    Water Excluder(example of boat) seemed to be only to remove the water from the outside,
    but it didn't really seem to exclude the water from the space.
    It doesn't seem to be available to implement like these aquariums.
    Are there any features that can help create a aquariums(or fishbowl)?
    Or if that function is being prepared, when will i hear the good news?

    edit)
    I solved this problem using my own simple trick,
    (Using a few local volumes, effect, materials)
    which I think is enough in my case.
    anyway, it would be nice to get information related to this.
     
    Last edited: Aug 18, 2023
    unity_8p6oRXXqiWbRTQ likes this.
  13. Spikebor

    Spikebor

    Joined:
    May 30, 2019
    Posts:
    278
    The system is truly great, please can you guys add it to URP.
     
    chap-unity and bdb400 like this.
  14. L_tD

    L_tD

    Joined:
    Mar 8, 2017
    Posts:
    39
    Hi sorry for late answer, thanks for helping, the sample scene helped a lot, hope you have time in future to bring shore foam etc, also to default settings without taking the material shaders from samples. But it works not, thanks a lot!
     
  15. ccfoo242

    ccfoo242

    Joined:
    Oct 9, 2014
    Posts:
    85
    I know it's not the same, but there's an unofficial URP water system in github that is based on what they used in the Boat Attack demo: https://github.com/Unity-Technologies/boat-attack-water
     
  16. iamarugin

    iamarugin

    Joined:
    Dec 17, 2014
    Posts:
    879
    Hey, are there any plans to make the ocean system compatible with ECS?
    For example, I have a planet ocean geometry, but it is rendered though ECS (so no MeshRenderers). It would be great to be able to tell water system, that this set of meshes is an water though some API.
     
    Last edited: Aug 22, 2023
    bdb400 likes this.
  17. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    This is not a priority for now. In any case if you are trying to make a planet geometry this will not work currently as the system is not able to render curved meshes
     
    chap-unity likes this.
  18. gamedevpeon

    gamedevpeon

    Joined:
    Sep 12, 2021
    Posts:
    6
    Yes, I have a situation similar to yours and I am awfully curious about this too. I am trying to just make a little submarine simulation and I may just shelve it for a bit and see how things evolve in a couple years. Assuming im still around.

    The water excluder we are given is such a limited use thing, I guess its fine if you want your character to sit above the water. I am also guessing this is essentially the depth shader trick.

    Really, I dont even need that, I, and you, just need a way to render objects in the correct order, and I feel like this should be such a easy thing to do with a shader, but Im also guessing that there is going to be some really complex rendering hd pipeline technical stuff as to why I cant. I hope that enough people will ask for this feature that we can see it implemented.

    I guess no one wants to answer you because there is a answer if you look but im happy to share what I know.

    https://docs.unity3d.com/Packages/c...inition@14.0/manual/WaterSystem-Overview.html

    The water looks beautiful team, it really does. So does the sky and clouds. Really impressive work. Ive always been intimidated by shaders and looking at the hdrp code makes my head spin. I know its not easy or quick.

    But I really do hope these features are eventually implemented.

    I know you should never use a second camera in hdrp, just having it active and not rendering anything halves your fps. But I thought I would try using one and a render target texture to see what it would look like. If you dont mind, would you care to share a screenshot of the results of what you came up with?

    My solution is obviously not ideal, the main problem being the waterline doesnt even near match up with the actual water, which makes sense because its a camera. But its the effect im looking for. Considering its just a small hobby project I dont mind using a second camera if it can get the effect I want.

    subtest1.gif

    Really seems as simple to me as taking the original image without water, overlaying the screen with water and then rendering the glass. But transparent objects in hdrp are a nightmare and I have no idea how to do this in a shader. I know it has something to do with how hdrp doesnt guarantee the rendering order of objects.

    I assume that when things are polished that this will no longer be a issue. Again everything looks great, but not letting us do simple things like this, or using transparent objects in the volumetric clouds.

    Its a bummer. Otherwise, I think hdrp looks amazing. I am so tired of cartoony looking video games.
     
  19. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    Hey, what version are you using ?
    In 23.2 the water line is pixel perfect with the water (some earlier versions don't have this)
    Additionally the water excluders work underwater which help in some cases when making a submarine
    Finally there is an option to properly handle transparency sorting with refractive objects, which allow to render transparents underwater.
    On transparent materials, there is a 'receive fog' checkbox which allows to disable both the height fog and the underwater absorption. This can be really helpful when making a glass underwater like the tunnel in the screenshots you linked
     
    chap-unity likes this.
  20. Loki18000

    Loki18000

    Joined:
    Apr 1, 2015
    Posts:
    75
    Hello,
    I've only just found out about the new water system. I usually work with URP.

    This may be a question that most won't ask but is there a way to turn it into a more low poly effect?
    I've been working on my own water but this would save me a lot of time.
    Thanks.
     
  21. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    It is possible to provide a custom mesh for the surface rendering. I didn't try but you could give it a low poly mesh and disable tessellation.
    Then you'll probably have to make a custom water shadergraph to have low poly normals also
     
    Last edited: Sep 1, 2023
  22. iamarugin

    iamarugin

    Joined:
    Dec 17, 2014
    Posts:
    879
    I have a water surface (river) which consists from several custom meshes. It looks like this:

    upload_2023-9-3_18-33-34.png

    So how to author the current map in this case? How are UV mapped? Are they in world space?
     
  23. chap-unity

    chap-unity

    Unity Technologies

    Joined:
    Nov 4, 2019
    Posts:
    755
    Tu current map is "projected" onto an area that you can define in your water surface itself (extent) so it doesn't really care about the UV of your meshes, it uses world space. You can then translate it using offset parameters.

    upload_2023-9-3_22-40-31.png
     
    hugokostic likes this.
  24. iamarugin

    iamarugin

    Joined:
    Dec 17, 2014
    Posts:
    879
    Got it, thanks!
     
  25. GXMark

    GXMark

    Joined:
    Oct 13, 2012
    Posts:
    513
    Lets face it this windowing effect needs pretty much removing ITS HORRIBLE !
     
  26. PaulMDev

    PaulMDev

    Joined:
    Feb 19, 2019
    Posts:
    69
    It's how water react in real life so it's more complicated than that.
    upload_2023-9-14_16-57-24.jpeg
    Maybe there could be a way to add additional noise to the edges or something like that, idk.
     
    chap-unity likes this.
  27. GXMark

    GXMark

    Joined:
    Oct 13, 2012
    Posts:
    513
    That looks better than what i was getting. I was getting solid lines. It looked liked a hole cutout.
     
  28. Reanimate_L

    Reanimate_L

    Joined:
    Oct 10, 2009
    Posts:
    2,788
    To be honest i don't mind if they want to add refraction window (especially if the visual improved), but having an option to disable that would be great. People can choose between physical aesthetic or clarity. This is for gameplay purpose, imagine if COD MW wetwork mission but there's a refraction window when you are underwater, it would be difficult to pinpoint enemy above water due the refraction IOR. . .
     
  29. hugokostic

    hugokostic

    Joined:
    Sep 23, 2017
    Posts:
    78
    I just made some experimentation about "fast buoyancy", using the lastest WaterScene's git repo as base.
    I have added few lines to the FitToWaterSurface sample script, I have join the script to this post, it allow user to use a Rigidbody and AddForce instead of transform handling which produce kind of buoyancy by default.
    So I want to share some interresting result and how to setup for everyone that need fast buoyancy using unity physics and the water system, It require only using the modified script, enable "UseRigidbody" and add rigidbody component, then it allow to tweak the rigidbody mass and drag to obtain the needed result, as show the following video.



    I have added a "force" multiplier in the script too to allow maniability, but in fact the drag of the rigidbody produce almost the same effect by mitigating the up and down rate of the buoyancy. The Mass of the rigidbody will more add to the offset that the object will have about Y axis of the water surface globally, allowing the object to flow completly too above a certain threshold of mass too
     

    Attached Files:

  30. hugokostic

    hugokostic

    Joined:
    Sep 23, 2017
    Posts:
    78
    note that this implementation work for object that do not bump out too much off the water surface and really stick to it, because the correct behavior would be : to not apply the force down and let gravity do (in air mode) if the object y + his radius/bound value is above the water surface height.
     
  31. Jack_Martison

    Jack_Martison

    Joined:
    Jun 24, 2018
    Posts:
    134
  32. hugokostic

    hugokostic

    Joined:
    Sep 23, 2017
    Posts:
    78
    @adrien-de-tocqueville, I have a request : as I am struggling a little bit using a CurrentMap on a River as CustomMesh, it look like I can't (it's hard) to align them as my (river)mesh can have any world position after being generated(it's not 0,0,0) so it's can be very hard to figure out the offset and extend for current to apply
    So, it it possible to ask an option to use UV(I have made a UV0 using top view for all my rivers) instead of world space projection for Current on Rivers using a Mesh?
    The mesh itself look good as River, so I would like to keep using meshes so.
     
  33. adrien-de-tocqueville

    adrien-de-tocqueville

    Unity Technologies

    Joined:
    Mar 16, 2020
    Posts:
    245
    What version are you using, we made some changes(23.2 i'd say) to the location of current map when the water surface moves. Now result should be independent of the position you set in the transform
     
    hugokostic likes this.
  34. chap-unity

    chap-unity

    Unity Technologies

    Joined:
    Nov 4, 2019
    Posts:
    755
    A version of this is coming (few weeks) in the HDRP package water sample scenes in 2023.3 versions.
    There's a few improvements we pushed to make the scenes more complete.
     
    hugokostic likes this.
  35. chap-unity

    chap-unity

    Unity Technologies

    Joined:
    Nov 4, 2019
    Posts:
    755
    I kind of agree that our result is flater. We'll see what's possible to try and improve this !
     
    PaulMDev likes this.
  36. hugokostic

    hugokostic

    Joined:
    Sep 23, 2017
    Posts:
    78
    23.1 :), Ok thx! for now, think I can't upgrade my project without breaking, anyway I did figure out how to make my flowmap work (more or less) and how to align them with my rivers so it's good for me.
     
    chap-unity likes this.
  37. hugokostic

    hugokostic

    Joined:
    Sep 23, 2017
    Posts:
    78
    Woa can't wait to see that!
     
    chap-unity likes this.
  38. Jack_Martison

    Jack_Martison

    Joined:
    Jun 24, 2018
    Posts:
    134
    I think something like painting straight on the water is much more convenient to make flow, foam and water masks, fiddling all of that with unknown results is really painful, or perhaps you used something else to make accurate foam around edges...
     
    chap-unity likes this.
  39. chap-unity

    chap-unity

    Unity Technologies

    Joined:
    Nov 4, 2019
    Posts:
    755
    I agree with you, this would be much easier to have a tool to paint the water flow instead of relying on a simili flowmap to make in a external image editor.

    As for the foam around the edge, in the samples we use this trick:
    Basically comparing the difference between the depth of the pixel on the water surface and the depth of the opaque behind it. If that distance is relatively small (means shallow water) we add foam by injecting this into the custom foam input in the shader graph.

    upload_2023-9-22_9-50-2.png
    (the last value (W or A in the Split node) in the screen position in raw mode is the depth of the pixel)

    It's far from perfect since it really depends on the geometry below the water but it's good enough for multiple scenarios.

    You can get the graph on the water sample (package manager or the github one)
     
  40. mgeorgedeveloper

    mgeorgedeveloper

    Joined:
    Jul 10, 2012
    Posts:
    308
    You can also add some basic trig magic to this to guess the true vertical depth so that foam doesn't change drastically based on the angle at which the camera looks at the water surface.
     
    chap-unity likes this.
  41. Rowlan

    Rowlan

    Joined:
    Aug 4, 2016
    Posts:
    4,109
    Using the Water as preset for MicroVerse:


    It all works together quite nicely and that's HDRP 14 ... gotta try the latest :)
     
  42. chap-unity

    chap-unity

    Unity Technologies

    Joined:
    Nov 4, 2019
    Posts:
    755
    Hey water people, as part of a huge refactor on samples (forum post incoming), a small update was just merged in trunk regarding the HDRP Package Manager Water Sample, here's the additions:

    New rain scene, using water surface shader graph material to alter normals.

    Rain_Sample.gif


    On the island scene, the shore waves on the beach are slightly better since they use deformers and now SG decals affecting transparents.
    This scene also showcases a really simple character controller creating deformations on the water as it moves through it.

    Foam_Player_Island.gif

    On the pool scene, we also added a script simulating buoyancy using Unity's rigidbody (So not just only the beach ball sticking to the water surface), interactions and movement depending on deformations.

    Impact_Pool_VFX.gif

    This landed in 2023.3.0a9 (will be published in a few days )

    Don't hesitate if you have feedback on it. Hope it helps! :)
     
  43. Rowlan

    Rowlan

    Joined:
    Aug 4, 2016
    Posts:
    4,109
    Automatic distribution or a different mechanism for shore waves would be my highest priority currently. Nobody wants to distribute those manually on an island.
     
    shikhrr and chap-unity like this.
  44. GXMark

    GXMark

    Joined:
    Oct 13, 2012
    Posts:
    513
    Just wanted to say you guys are doing fantastic work on this new unity water system. I truly love its optimization and performance you put into this very realistic water system. I noticed on the enable scripting option it says in the tooltip that it greatly decreases performance. How bigga concern is this to the water system for general usage of scripts for buoyancy physics?
     
    chap-unity likes this.
  45. GXMark

    GXMark

    Joined:
    Oct 13, 2012
    Posts:
    513
    I think the big game changer when it comes to waves is that they need to shape to the contours of the terrain (height map data). I don't know if this is something on the roadmap for the water system but would be a cool feature.
     
    chap-unity likes this.
  46. hugokostic

    hugokostic

    Joined:
    Sep 23, 2017
    Posts:
    78
    Nice! It made using a normal map flipbook?
     
    chap-unity likes this.
  47. chap-unity

    chap-unity

    Unity Technologies

    Joined:
    Nov 4, 2019
    Posts:
    755
    Yep, I agree, we thought about this and this is on the road map (someday) as this could be taken care of when we are going to be able to have a proper SDF of the terrain, but we can't give a proper estimate of when that will be for now.

    In general, it's pretty expensive as the system have to re-do the simulation (originally done on the GPU) on the CPU, however, it depends on how much you rely on it. Also, you can also use burst to paralellize those request which could help optimize perf when you have a lots of buoyant objects.
    Furthermore, @adrien-de-tocqueville optimized this recently by letting you get the water height by reading the texture from the GPU with a few frames delay (and this is a huge optimization as this won't re-compute the whole simulation on the CPU). So if you are not after super duper accuracy, this is a really helpful option as well.
    This landed in 2023.3.0a1 and 2023.2.0b8



    yep, see the top response, and I agree :)

    Not at all, it's a procedural solution !
    The short is version is just that it's using a double buffered render texture that is sampled and updated each frame to create the dispersion of the "raindrop waves". Each frame we introduce a new set of perturbations while making the previous one grow up until a certain point.. etc
     
    GXMark, hugokostic and Rowlan like this.
  48. jbooth

    jbooth

    Joined:
    Jan 6, 2014
    Posts:
    5,457
    Isn't terrain a distance field by it's very nature? Or do you mean an SDF storing the vector to the shoreline intersection? (That could be generated in realtime by rendering the intersection into a buffer and using a jump fill to turn it into a SDF vector field)

    I do SDF type stuff with terrain all the time- the big thing I often lack is a way to access a height field made from multiple terrain chunks without the CPU needing to let each material know about the data it needs (ie: Not easy with terrain details, tree's, etc, unless you take over rendering of them). If I could easily convert a world space position into a height/normal/splat sample, it would solve a ton of issues - either via virtual texturing or by storing the data in a texture array instead of individually.
     
    GXMark and Rowlan like this.
  49. chap-unity

    chap-unity

    Unity Technologies

    Joined:
    Nov 4, 2019
    Posts:
    755
    yes, this. It's possible, it just have to be planned and done properly to be able to drop an island somewhere and have proper waves arriving on it without having to do it all by hand :)
     
    DEEnvironment and shikhrr like this.
  50. jbooth

    jbooth

    Joined:
    Jan 6, 2014
    Posts:
    5,457
    And also handling crossing multiple terrains, which makes everything harder for SDF fields with Unity terrains. In MicroVerse I use SDF fields for splines, tree occlusion, sound propigation, modifying heights around trees, etc, and just establish that no field can cross more than 1/2 of a terrain in size, and process an extra half terrain on each tile. Takes well under 1ms per terrain, and only happens when the terrain is edited.

    When designing the new terrain system (or improving the old), it would be nice if these kinds of operations and data structures would be easier to create and access, as well as available to external systems. Being able to sample existing data from world positions directly inside of a shader, without having to involve the CPU, would make things like terrain blending of objects, grass, and tree's possible without having to write a GPU instancer and take over drawing so that the shader can know about the data it needs. And having a general way to have these data structures generated and used by multiple systems rather than being generated by each system independently.

    For instance, you might use this for water right now, but having an SDF to a shoreline can be useful for sound and other systems as well. Or an SDF to where snow or a particular texture layer is can be useful for game play or particle effect propigation. I support all of this kind of stuff with MicroVerse's mask module and ambient sound system, so these are real world examples, but not being a standard way to work means I don't think many people take advantage of the data it can generate outside of what MV does with it, and there's literally so much use for "Which way/how far is X feature".