# How to convert World Position to Screen UV Coordinate?

**URL:** <https://forums.unrealengine.com/t/how-to-convert-world-position-to-screen-uv-coordinate/458907>\
**Category:** Rendering\
**Tags:** screen-position, unreal-engine, UE4, shader, CPP, question\
**Created:** [November 28, 2019, 3:59am UTC](https://forums.unrealengine.com/t/how-to-convert-world-position-to-screen-uv-coordinate/458907 "2019-11-28T03:59:46Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![marunemitsu](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@marunemitsu](https://forums.unrealengine.com/u/marunemitsu)\
**Post date:** [November 28, 2019, 3:59am UTC](https://forums.unrealengine.com/t/how-to-convert-world-position-to-screen-uv-coordinate/458907/1 "2019-11-28T03:59:46Z")

</div>

Hi, everyone, I met this issue when coding my own shader.  
I got a World Position (x,y,z), I wanna convert it into Screen View UV coordinate (x,y). I can’t find a matrix or function of current view can do this.

---

<div class="post-metadata">

**Author:** ![Max\_Payne](https://d1ap1mz92jnks1.cloudfront.net/user_avatar/forums.unrealengine.com/max_payne/32/1088663_2.png) [@Max\_Payne](https://forums.unrealengine.com/u/Max_Payne)\
**Post date:** [November 28, 2019, 10:37am UTC](https://forums.unrealengine.com/t/how-to-convert-world-position-to-screen-uv-coordinate/458907/2 "2019-11-28T10:37:11Z")

</div>

Have you tried [Project World to Screen](https://docs.unrealengine.com/en-US/BlueprintAPI/Utilities/ProjectWorldtoScreen/index.html)?

Also check [this](https://www.youtube.com/watch?v=pA3K0oWUEj8) tutorial.

---

<div class="post-metadata">

**Author:** ![marunemitsu](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@marunemitsu](https://forums.unrealengine.com/u/marunemitsu)\
**Post date:** [December 2, 2019, 2:31pm UTC](https://forums.unrealengine.com/t/how-to-convert-world-position-to-screen-uv-coordinate/458907/3 "2019-12-02T14:31:05Z")

</div>

I’m sorry that I was not describe this issue clearly. I wanna project world position to screen coordinate in .usf file not in a blueprint.

---

<div class="post-metadata">

**Author:** ![marunemitsu](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@marunemitsu](https://forums.unrealengine.com/u/marunemitsu)\
**Post date:** [December 4, 2019, 2:24pm UTC](https://forums.unrealengine.com/t/how-to-convert-world-position-to-screen-uv-coordinate/458907/4 "2019-12-04T14:24:44Z")

</div>

I found there’s a matrix named _WorldToClip_ in _FViewUniformShaderParameters_.  
So I searched _View.WorldToClip_ in built-in shaders, I found this in _DistanceFieldObjectCulling.usf_ as follow:

```
OutPosition = mul(float4(WorldPosition, 1), View.WorldToClip);

```

I also found this in _DeferredDecal.usf_ :

```
float4 CSHitPos = mul(float4(WSPosition, 1), View.WorldToClip);
OutDepth = CSHitPos.z / CSHitPos.w;

```

So I tried to use WorldToClip in my own shader as follow.

```
    float2 WorldToPixelCoordinate(float3 WorldPosition)
    {
        float4 PixelCoordinate = mul(float4(WorldPosition, 1.0f), View.WorldToClip);
        return PixelCoordinate.xy / PixelCoordinate.w;
    }

```

It was worked!  
Though I’m not sure if it can project correctly, the results were visible at least…

---

<div class="post-metadata">

**Author:** ![marunemitsu](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@marunemitsu](https://forums.unrealengine.com/u/marunemitsu)\
**Post date:** [December 16, 2019, 2:37pm UTC](https://forums.unrealengine.com/t/how-to-convert-world-position-to-screen-uv-coordinate/458907/5 "2019-12-16T14:37:48Z")

</div>

float2 UV = ScreenPos \* View.ScreenPositionScaleBias.xy + View.ScreenPositionScaleBias.wz;  
float2 PixelCoordinate = UV / View.BufferSizeAndInvSize.zw - 0.5;

Must add codes above to convert to Pixel Coordinate.
