Advertisement
noradninja

Fixed_Shield_Shader

Aug 3rd, 2023
1,248
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.28 KB | None | 0 0
  1. Shader "Halo/ArmorShader" {
  2.     Properties{
  3.         _ColorArmadura("Color Armadura", Color) = (1,1,1,1)
  4.         _MainTex("Albedo (RGB)", 2D) = "white" {}
  5.         _Multipurpose("Multipurpose (RGB)", 2D) = "white" {}
  6.         _Cubemap("Cubemap", CUBE) = "" {}
  7.         _CubemapPower("Cubemap Power", Range(0,1)) = 0.5
  8.         _VisorTexture("Visor Texture", 2D) = "white" {}
  9.         _CubemapVisor("Cubemap Visor", CUBE) = "" {}
  10.         _ShieldColor("Shield Color", Color) = (1,1,1,1)
  11.         _ShieldActive("Shield Active", Range(0,1)) = 0.5
  12.         _ShieldTex("Shield Texture", 2D) = "white" {}
  13.         _ShieldEdge("Shield Edge", Range(0,1)) = 0.5
  14.         _ShieldTransparency("Shield Transparency", Range(0,2)) = 0.5
  15.         _ShieldMovement("Shield Movement", Range(0,0.1)) = 0.05
  16.     }
  17.         SubShader{
  18.             Tags { "RenderType" = "Opaque" }
  19.             LOD 100
  20.  
  21.             Pass {
  22.                 CGPROGRAM
  23. // Upgrade NOTE: excluded shader from DX11; has structs without semantics (struct v2f members color)
  24.  
  25.                 #pragma vertex vert
  26.                 #pragma fragment frag
  27.  
  28.                 #include "UnityCG.cginc"
  29.  
  30.                 sampler2D _MainTex;
  31.                 sampler2D _Multipurpose;
  32.                 samplerCUBE _Cubemap;
  33.                 float4 _ColorArmadura;
  34.                 float _CubemapPower;
  35.                 sampler2D _VisorTexture;
  36.                 samplerCUBE _CubemapVisor;
  37.                 float4 _ShieldColor;
  38.                 float _ShieldActive;
  39.                 sampler2D _ShieldTex;
  40.                 float _ShieldEdge;
  41.                 float _ShieldTransparency;
  42.                 float _ShieldMovement;
  43.             struct appdata {
  44.                     float4 vertex : POSITION;
  45.                     float2 uv : TEXCOORD0;
  46.                     float3 normal : NORMAL;
  47.             };
  48.             struct v2f {
  49.                 float4 vertex : POSITION;
  50.                 float2 uv : TEXCOORD0;
  51.                 float3 worldRefl : TEXCOORD1;
  52.                 float3 worldNormal : TEXCOORD2;
  53.                 float3 worldPosition: TEXCOORD3;
  54.             };
  55.                
  56.                 v2f vert(appdata v) {
  57.                     v2f o;
  58.                     o.vertex = UnityObjectToClipPos(v.vertex);
  59.                     o.uv = v.uv;
  60.                     o.worldNormal = normalize(mul(v.normal, (float3x3)unity_ObjectToWorld));
  61.                     float3 worldView = normalize(_WorldSpaceCameraPos - mul(unity_ObjectToWorld, v.vertex).xyz);
  62.                     o.worldRefl = reflect(-worldView, o.worldNormal);
  63.                     //////This normalize function in your fragment shader was breaking it
  64.                     //////I think because of the _WorldSpaceCameraPos access,
  65.                     //////Vita has no POSITION semantic to access this in the fragmant shader
  66.                     float3 worldPos = normalize(_WorldSpaceCameraPos - v.vertex.xyz);
  67.                     o.worldPosition = worldPos;
  68.                     return o;
  69.                 }
  70.  
  71.                 fixed4 frag(v2f i) : SV_Target
  72.                 {
  73.                     fixed4 col = tex2D(_MainTex, i.uv);
  74.                     fixed4 multipurpose = tex2D(_Multipurpose, i.uv);
  75.                     fixed4 visor = tex2D(_VisorTexture, i.uv);
  76.                     col.rgb = lerp(col.rgb, _ColorArmadura.rgb * multipurpose.r, multipurpose.b);
  77.                     float3 viewDir = reflect(i.worldNormal, i.worldRefl);
  78.                     float opacity = 1 - visor.a;
  79.                     col.rgb += texCUBE(_Cubemap, i.worldRefl).rgb * multipurpose.r * _CubemapPower * opacity;
  80.                     col.rgb += texCUBE(_CubemapVisor, viewDir).rgb * visor.a * multipurpose.r;
  81.                    
  82.                     //the commented out part below is what is causing your shader to break, it should compile fine now
  83.                     float fresnel = pow(1 - max(dot(i.worldNormal, i.worldPosition), 0.0f), 5.0f);
  84.                     fresnel = lerp(1, fresnel, _ShieldEdge);
  85.                     fixed4 shield = tex2D(_ShieldTex, i.uv + float2(_Time.y * _ShieldMovement, _Time.y * _ShieldMovement));
  86.                     shield.rgb *= _ShieldColor.rgb;
  87.                     col.rgb = lerp(col.rgb, shield.rgb, shield.a * _ShieldTransparency * fresnel * _ShieldActive);
  88.                     return col;
  89.                 }
  90.  
  91.                 ENDCG
  92.             }
  93.         }
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement