Use the camera in a custom URP shader
Get the position and direction of the camera.
読み終わるまでの所要時間 2 分最終更新 22日前
To use the camera in a custom Universal Render Pipeline (URP) shader, follow these steps:
- Add inside the
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"in your shader file. TheHLSLPROGRAMfile imports theCore.hlslfile.ShaderVariablesFunction.hlsl - Use one of the following methods from the file.
ShaderVariablesFunction.hlsl
Method | Syntax | Description |
|---|---|---|
| | Returns the world space position of the camera. |
| | Returns the width and height of the screen in pixels. |
| | Returns the forward direction of the view in world space. |
| | Returns |
| | Converts a linear depth buffer value to view depth. Refer to Cameras and depth textures for more information. |
| | Flips the y coordinate of the screen space position, if Unity uses an upside-down coordinate space. You can also input both a |
Example
The following URP shader draws object surfaces with colors that represent the direction from the surface to the camera.
Shader "Custom/DirectionToCamera"{ SubShader { Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" } Pass { HLSLPROGRAM #pragma vertex vert #pragma fragment frag #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" struct Attributes { float4 positionOS : POSITION; float2 uv: TEXCOORD0; }; struct Varyings { float4 positionCS : SV_POSITION; float2 uv: TEXCOORD0; float3 viewDirection : TEXCOORD2; }; Varyings vert(Attributes IN) { Varyings OUT; // Get the positions of the vertex in different coordinate spaces VertexPositionInputs positions = GetVertexPositionInputs(IN.positionOS); OUT.positionCS = positions.positionCS; // Get the direction from the vertex to the camera, in world space OUT.viewDirection = GetCameraPositionWS() - positions.positionWS.xyz; return OUT; } half4 frag(Varyings IN) : SV_Target { // Set the fragment color to the direction vector return float4(IN.viewDirection, 1); } ENDHLSL } }}