源战役客户端
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

52 wiersze
2.1 KiB

1 miesiąc temu
  1. // 幽灵模式渲染shader
  2. Shader "SaberShad/GhostModeShader"
  3. {
  4. Properties {
  5. _MainTex ("Main Tex", 2D) = "white" {} //主纹理
  6. // _BumpMap("Bump Map",2D)= "bump" {} //法线纹理
  7. _RimColor("Rim Color",Color) = (1, 1, 1, 1) //模型边缘颜色
  8. _RimPower("Rim Power",Range(0.2,2.0)) = 1.5 //边缘强度放大的倍数
  9. _Brightness("Brightness",Range(0.0,3.0)) = 2.0 //光强
  10. }
  11. SubShader {
  12. Tags{
  13. "RenderType"="Transparent"
  14. "Queue"="Transparent"
  15. "IgnoreProject"="True"
  16. }
  17. Pass{
  18. ZWrite On // 写入深度缓存的作用就是为ZTest的比较做准备
  19. ColorMask 0
  20. }
  21. CGPROGRAM
  22. #pragma surface surf Lambert alpha noambient nodirlightmap novertexlights
  23. struct Input{
  24. float2 uv_MainTex;
  25. float2 uv_BumpMap;
  26. float3 viewDir;//当前视角方向
  27. float3 worldNormal; // 使用模型自己的法线
  28. };
  29. sampler2D _MainTex;
  30. sampler2D _BumpMap;
  31. float4 _RimColor;
  32. float _RimPower;
  33. float _Brightness;
  34. void surf(Input IN,inout SurfaceOutput o)
  35. {
  36. half4 basecol=tex2D(_MainTex,IN.uv_MainTex);
  37. //RGB转为灰度值
  38. half3 graycol=dot(basecol.rgb,float3(0.3,0.59,0.11));
  39. o.Albedo=graycol;
  40. // o.Normal=UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap));
  41. //点积即为cosA的值(其中A是viewDir和Normal的夹角),值域为1-0
  42. //那么1-cosA的值域就变成0-1了,当A角度达到90,正好模拟边缘光的强度
  43. // 可以理解为视线角度跟表面法线的点乘越高(角度越小),边缘光效果越差
  44. half rim=1.0-saturate(dot(normalize(IN.viewDir),IN.worldNormal));
  45. //把边缘光放大_RimPower倍,使边缘光更清楚
  46. o.Emission=_RimColor*pow(rim,_RimPower)*_Brightness;
  47. o.Alpha=(o.Emission.r+o.Emission.g+o.Emission.b) / 3.0;
  48. }
  49. ENDCG
  50. }
  51. FallBack "Diffuse"
  52. }