Search Unity

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:
    162
    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.