Search Unity

  1. How can our website serve you better? Give us your feedback. Take our survey and let us know.
    Dismiss Notice

How to convert my Custom Equirectangular Shader to URP ?

Discussion in 'Universal Render Pipeline' started by alphakanal, Apr 20, 2020.

  1. alphakanal

    alphakanal

    Joined:
    Jan 21, 2013
    Posts:
    52
    Hi!
    I made ( mostly via copy'n'paste ) a custom Shader for Equirectangular Textures - worked fine with the SRP.
    But now i've tried to convert it into URP but i can't get it running...any ideas ?

    Code (CSharp):
    1.  
    2. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
    3.  
    4. Shader "Custom/Equirectangular" {
    5.     Properties{
    6.         _Color("Main Color", Color) = (1,1,1,1)
    7.         _MainTex("Diffuse (RGB) Alpha (A)", 2D) = "gray" {}
    8.     }
    9.  
    10.         SubShader{
    11.             Pass {
    12.                 Tags {"LightMode" = "Always"}
    13.  
    14.                 CGPROGRAM
    15.                     #pragma vertex vert
    16.                     #pragma fragment frag
    17.                     #pragma fragmentoption ARB_precision_hint_fastest
    18.                     #pragma glsl
    19.                     #pragma target 3.0
    20.  
    21.                     #include "UnityCG.cginc"
    22.  
    23.                     struct appdata {
    24.                        float4 vertex : POSITION;
    25.                        float3 normal : NORMAL;
    26.                     };
    27.  
    28.                     struct v2f
    29.                     {
    30.                         float4    pos : SV_POSITION;
    31.                         float3    normal : TEXCOORD0;
    32.                     };
    33.  
    34.                     v2f vert(appdata v)
    35.                     {
    36.                         v2f o;
    37.                         o.pos = UnityObjectToClipPos(v.vertex);
    38.                         o.normal = v.normal;
    39.                         return o;
    40.                     }
    41.  
    42.                     sampler2D _MainTex;
    43.  
    44.                     #define PI 3.141592653589793
    45.  
    46.                     inline float2 RadialCoords(float3 a_coords)
    47.                     {
    48.                         float3 a_coords_n = normalize(a_coords);
    49.                         float lon = atan2(a_coords_n.z, a_coords_n.x);
    50.                         float lat = acos(a_coords_n.y);
    51.                         float2 sphereCoords = float2(lon, lat) * (1.0 / PI);
    52.                         return float2(sphereCoords.x * 0.5 + 0.5, 1 - sphereCoords.y);
    53.                     }
    54.  
    55.                     float4 frag(v2f IN) : COLOR
    56.                     {
    57.                         float2 equiUV = RadialCoords(IN.normal);
    58.                         return tex2D(_MainTex, equiUV);
    59.                     }
    60.                 ENDCG
    61.             }
    62.     }
    63.         FallBack "VertexLit"
    64. }
    Would be awesome if someone may know what's wrong :)
     
  2. Elvar_Orn

    Elvar_Orn

    Unity Technologies

    Joined:
    Dec 9, 2019
    Posts:
    125
    Give this a shot:

    Code (CSharp):
    1. Shader "Custom/Equirectangular"
    2. {
    3.     Properties
    4.     {
    5.         _Color("Main Color", Color) = (1,1,1,1)
    6.         _MainTex("Diffuse (RGB) Alpha (A)", 2D) = "gray" {}
    7.     }
    8.     SubShader
    9.     {
    10.         Pass
    11.         {
    12.             //Tags {"LightMode" = "Always"}
    13.             Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "IgnoreProjector" = "True" }
    14.  
    15.             HLSLPROGRAM
    16.                 #pragma vertex vert
    17.                 #pragma fragment frag
    18.                 #pragma fragmentoption ARB_precision_hint_fastest
    19.                 #pragma glsl
    20.                 #pragma target 3.0
    21.  
    22.                 //#include "UnityCG.cginc"
    23.                 #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
    24.  
    25.                 struct appdata
    26.                 {
    27.                    float4 vertex : POSITION;
    28.                    float3 normal : NORMAL;
    29.                 };
    30.  
    31.                 struct v2f
    32.                 {
    33.                     float4    pos : SV_POSITION;
    34.                     float3    normal : TEXCOORD0;
    35.                 };
    36.  
    37.                 v2f vert(appdata v)
    38.                 {
    39.                     v2f o;
    40.                     o.pos = TransformObjectToHClip(v.vertex.xyz);
    41.                     o.normal = v.normal;
    42.                     return o;
    43.                 }
    44.  
    45.                 sampler2D _MainTex;
    46.                 #define PI 3.141592653589793
    47.  
    48.                 inline float2 RadialCoords(float3 a_coords)
    49.                 {
    50.                     float3 a_coords_n = normalize(a_coords);
    51.                     float lon = atan2(a_coords_n.z, a_coords_n.x);
    52.                     float lat = acos(a_coords_n.y);
    53.                     float2 sphereCoords = float2(lon, lat) * (1.0 / PI);
    54.                     return float2(sphereCoords.x * 0.5 + 0.5, 1 - sphereCoords.y);
    55.                 }
    56.  
    57.                 float4 frag(v2f IN) : COLOR
    58.                 {
    59.                     float2 equiUV = RadialCoords(IN.normal);
    60.                     return tex2D(_MainTex, equiUV);
    61.                 }
    62.             ENDHLSL
    63.         }
    64.     }
    65.     FallBack "VertexLit"
    66. }
     
  3. alphakanal

    alphakanal

    Joined:
    Jan 21, 2013
    Posts:
    52
    Works perfect!
    Thank you!! :)
     
    Elvar_Orn likes this.
unityunity