【实现100个unity殊效之28】皮毛shader着色器 实现可以用动的毛茸茸毛绒绒 ...

打印 上一主题 下一主题

主题 1669|帖子 1669|积分 5007

结果



  
一、内置渲染管线

缺点是仅支持内置渲染管线。且无法毛发无法动
下载

Github: https://github.com/Sorumi/UnityFurShader
支持几只着色器


Basic 根本

具有情况光、漫反射和镜面反射的根本毛发着色器。

  1. Shader "Fur/FurBasicShader"
  2. {
  3.     Properties
  4.     {
  5.         _Color ("Color", Color) = (1, 1, 1, 1)
  6.         _Specular ("Specular", Color) = (0, 0, 0, 1)
  7.         _Shininess ("Shininess", Range(0.01, 128.0)) = 8.0
  8.         
  9.         _MainTex ("Texture", 2D) = "white" { }
  10.         _FurTex ("Fur Pattern", 2D) = "white" { }
  11.         
  12.         _FurLength ("Fur Length", Range(0.0, 1)) = 0.5
  13.     }
  14.     Category
  15.     {
  16.         Tags { "RenderType" = "Transparent" "IgnoreProjector" = "True" "Queue" = "Transparent" }
  17.         Cull Off
  18.         ZWrite On
  19.         Blend SrcAlpha OneMinusSrcAlpha
  20.         
  21.         SubShader
  22.         {
  23.             Pass
  24.             {
  25.                 CGPROGRAM
  26.                
  27.                 #pragma vertex vert_surface
  28.                 #pragma fragment frag_surface
  29.                 #define FURSTEP 0.00
  30.                 #include "FurHelper.cginc"
  31.                
  32.                 ENDCG
  33.                
  34.             }
  35.             Pass
  36.             {
  37.                 CGPROGRAM
  38.                
  39.                 #pragma vertex vert_base
  40.                 #pragma fragment frag_base
  41.                 #define FURSTEP 0.05
  42.                 #include "FurHelper.cginc"
  43.                
  44.                 ENDCG
  45.                
  46.             }
  47.             
  48.             Pass
  49.             {
  50.                 CGPROGRAM
  51.                
  52.                 #pragma vertex vert_base
  53.                 #pragma fragment frag_base
  54.                 #define FURSTEP 0.10
  55.                 #include "FurHelper.cginc"
  56.                
  57.                 ENDCG
  58.                
  59.             }
  60.             
  61.             Pass
  62.             {
  63.                 CGPROGRAM
  64.                
  65.                 #pragma vertex vert_base
  66.                 #pragma fragment frag_base
  67.                 #define FURSTEP 0.15
  68.                 #include "FurHelper.cginc"
  69.                
  70.                 ENDCG
  71.                
  72.             }
  73.             
  74.             Pass
  75.             {
  76.                 CGPROGRAM
  77.                
  78.                 #pragma vertex vert_base
  79.                 #pragma fragment frag_base
  80.                 #define FURSTEP 0.20
  81.                 #include "FurHelper.cginc"
  82.                
  83.                 ENDCG
  84.                
  85.             }
  86.             
  87.             Pass
  88.             {
  89.                 CGPROGRAM
  90.                
  91.                 #pragma vertex vert_base
  92.                 #pragma fragment frag_base
  93.                 #define FURSTEP 0.25
  94.                 #include "FurHelper.cginc"
  95.                
  96.                 ENDCG
  97.                
  98.             }
  99.             
  100.             Pass
  101.             {
  102.                 CGPROGRAM
  103.                
  104.                 #pragma vertex vert_base
  105.                 #pragma fragment frag_base
  106.                 #define FURSTEP 0.30
  107.                 #include "FurHelper.cginc"
  108.                
  109.                 ENDCG
  110.                
  111.             }
  112.             
  113.             Pass
  114.             {
  115.                 CGPROGRAM
  116.                
  117.                 #pragma vertex vert_base
  118.                 #pragma fragment frag_base
  119.                 #define FURSTEP 0.35
  120.                 #include "FurHelper.cginc"
  121.                
  122.                 ENDCG
  123.                
  124.             }
  125.             
  126.             Pass
  127.             {
  128.                 CGPROGRAM
  129.                
  130.                 #pragma vertex vert_base
  131.                 #pragma fragment frag_base
  132.                 #define FURSTEP 0.40
  133.                 #include "FurHelper.cginc"
  134.                
  135.                 ENDCG
  136.                
  137.             }
  138.             
  139.             Pass
  140.             {
  141.                 CGPROGRAM
  142.                
  143.                 #pragma vertex vert_base
  144.                 #pragma fragment frag_base
  145.                 #define FURSTEP 0.45
  146.                 #include "FurHelper.cginc"
  147.                
  148.                 ENDCG
  149.                
  150.             }
  151.             
  152.             Pass
  153.             {
  154.                 CGPROGRAM
  155.                
  156.                 #pragma vertex vert_base
  157.                 #pragma fragment frag_base
  158.                 #define FURSTEP 0.50
  159.                 #include "FurHelper.cginc"
  160.                
  161.                 ENDCG
  162.                
  163.             }
  164.             
  165.             Pass
  166.             {
  167.                 CGPROGRAM
  168.                
  169.                 #pragma vertex vert_base
  170.                 #pragma fragment frag_base
  171.                 #define FURSTEP 0.55
  172.                 #include "FurHelper.cginc"
  173.                
  174.                 ENDCG
  175.                
  176.             }
  177.             
  178.             Pass
  179.             {
  180.                 CGPROGRAM
  181.                
  182.                 #pragma vertex vert_base
  183.                 #pragma fragment frag_base
  184.                 #define FURSTEP 0.60
  185.                 #include "FurHelper.cginc"
  186.                
  187.                 ENDCG
  188.                
  189.             }
  190.             
  191.             Pass
  192.             {
  193.                 CGPROGRAM
  194.                
  195.                 #pragma vertex vert_base
  196.                 #pragma fragment frag_base
  197.                 #define FURSTEP 0.65
  198.                 #include "FurHelper.cginc"
  199.                
  200.                 ENDCG
  201.                
  202.             }
  203.             
  204.             Pass
  205.             {
  206.                 CGPROGRAM
  207.                
  208.                 #pragma vertex vert_base
  209.                 #pragma fragment frag_base
  210.                 #define FURSTEP 0.70
  211.                 #include "FurHelper.cginc"
  212.                
  213.                 ENDCG
  214.                
  215.             }
  216.             
  217.             Pass
  218.             {
  219.                 CGPROGRAM
  220.                
  221.                 #pragma vertex vert_base
  222.                 #pragma fragment frag_base
  223.                 #define FURSTEP 0.75
  224.                 #include "FurHelper.cginc"
  225.                
  226.                 ENDCG
  227.                
  228.             }
  229.             
  230.             Pass
  231.             {
  232.                 CGPROGRAM
  233.                
  234.                 #pragma vertex vert_base
  235.                 #pragma fragment frag_base
  236.                 #define FURSTEP 0.80
  237.                 #include "FurHelper.cginc"
  238.                
  239.                 ENDCG
  240.                
  241.             }
  242.             
  243.             Pass
  244.             {
  245.                 CGPROGRAM
  246.                
  247.                 #pragma vertex vert_base
  248.                 #pragma fragment frag_base
  249.                 #define FURSTEP 0.85
  250.                 #include "FurHelper.cginc"
  251.                
  252.                 ENDCG
  253.                
  254.             }
  255.             
  256.             Pass
  257.             {
  258.                 CGPROGRAM
  259.                
  260.                 #pragma vertex vert_base
  261.                 #pragma fragment frag_base
  262.                 #define FURSTEP 0.90
  263.                 #include "FurHelper.cginc"
  264.                
  265.                 ENDCG
  266.                
  267.             }
  268.             
  269.             Pass
  270.             {
  271.                 CGPROGRAM
  272.                
  273.                 #pragma vertex vert_base
  274.                 #pragma fragment frag_base
  275.                 #define FURSTEP 0.95
  276.                 #include "FurHelper.cginc"
  277.                
  278.                 ENDCG
  279.                
  280.             }
  281.             Pass
  282.             {
  283.                 CGPROGRAM
  284.                
  285.                 #pragma vertex vert_base
  286.                 #pragma fragment frag_base
  287.                 #define FURSTEP 1.00
  288.                 #include "FurHelper.cginc"
  289.                
  290.                 ENDCG
  291.                
  292.             }
  293.         }
  294.     }
  295. }
复制代码
Attributes 属性

添加毛发属性:密度、薄度、着色。

  1. Shader "Fur/FurAttributesShader"
  2. {
  3.     Properties
  4.     {
  5.         _Color ("Color", Color) = (1, 1, 1, 1)
  6.         _Specular ("Specular", Color) = (1, 1, 1, 1)
  7.         _Shininess ("Shininess", Range(0.01, 256.0)) = 8.0
  8.         
  9.         _MainTex ("Texture", 2D) = "white" { }
  10.         _FurTex ("Fur Pattern", 2D) = "white" { }
  11.         
  12.         _FurLength ("Fur Length", Range(0.0, 1)) = 0.5
  13.         _FurDensity ("Fur Density", Range(0, 2)) = 0.11
  14.         _FurThinness ("Fur Thinness", Range(0.01, 10)) = 1
  15.         _FurShading ("Fur Shading", Range(0.0, 1)) = 0.25
  16.     }
  17.     Category
  18.     {
  19.         Tags { "RenderType" = "Transparent" "IgnoreProjector" = "True" "Queue" = "Transparent" }
  20.         Cull Off
  21.         ZWrite On
  22.         Blend SrcAlpha OneMinusSrcAlpha
  23.         
  24.         SubShader
  25.         {
  26.             Pass
  27.             {
  28.                 CGPROGRAM
  29.                
  30.                 #pragma vertex vert_surface
  31.                 #pragma fragment frag_surface
  32.                 #define FURSTEP 0.00
  33.                 #include "FurHelper.cginc"
  34.                
  35.                 ENDCG
  36.                
  37.             }
  38.             Pass
  39.             {
  40.                 CGPROGRAM
  41.                
  42.                 #pragma vertex vert_base
  43.                 #pragma fragment frag_base
  44.                 #define FURSTEP 0.05
  45.                 #include "FurHelper.cginc"
  46.                
  47.                 ENDCG
  48.                
  49.             }
  50.             
  51.             Pass
  52.             {
  53.                 CGPROGRAM
  54.                
  55.                 #pragma vertex vert_base
  56.                 #pragma fragment frag_base
  57.                 #define FURSTEP 0.10
  58.                 #include "FurHelper.cginc"
  59.                
  60.                 ENDCG
  61.                
  62.             }
  63.             
  64.             Pass
  65.             {
  66.                 CGPROGRAM
  67.                
  68.                 #pragma vertex vert_base
  69.                 #pragma fragment frag_base
  70.                 #define FURSTEP 0.15
  71.                 #include "FurHelper.cginc"
  72.                
  73.                 ENDCG
  74.                
  75.             }
  76.             
  77.             Pass
  78.             {
  79.                 CGPROGRAM
  80.                
  81.                 #pragma vertex vert_base
  82.                 #pragma fragment frag_base
  83.                 #define FURSTEP 0.20
  84.                 #include "FurHelper.cginc"
  85.                
  86.                 ENDCG
  87.                
  88.             }
  89.             
  90.             Pass
  91.             {
  92.                 CGPROGRAM
  93.                
  94.                 #pragma vertex vert_base
  95.                 #pragma fragment frag_base
  96.                 #define FURSTEP 0.25
  97.                 #include "FurHelper.cginc"
  98.                
  99.                 ENDCG
  100.                
  101.             }
  102.             
  103.             Pass
  104.             {
  105.                 CGPROGRAM
  106.                
  107.                 #pragma vertex vert_base
  108.                 #pragma fragment frag_base
  109.                 #define FURSTEP 0.30
  110.                 #include "FurHelper.cginc"
  111.                
  112.                 ENDCG
  113.                
  114.             }
  115.             
  116.             Pass
  117.             {
  118.                 CGPROGRAM
  119.                
  120.                 #pragma vertex vert_base
  121.                 #pragma fragment frag_base
  122.                 #define FURSTEP 0.35
  123.                 #include "FurHelper.cginc"
  124.                
  125.                 ENDCG
  126.                
  127.             }
  128.             
  129.             Pass
  130.             {
  131.                 CGPROGRAM
  132.                
  133.                 #pragma vertex vert_base
  134.                 #pragma fragment frag_base
  135.                 #define FURSTEP 0.40
  136.                 #include "FurHelper.cginc"
  137.                
  138.                 ENDCG
  139.                
  140.             }
  141.             
  142.             Pass
  143.             {
  144.                 CGPROGRAM
  145.                
  146.                 #pragma vertex vert_base
  147.                 #pragma fragment frag_base
  148.                 #define FURSTEP 0.45
  149.                 #include "FurHelper.cginc"
  150.                
  151.                 ENDCG
  152.                
  153.             }
  154.             
  155.             Pass
  156.             {
  157.                 CGPROGRAM
  158.                
  159.                 #pragma vertex vert_base
  160.                 #pragma fragment frag_base
  161.                 #define FURSTEP 0.50
  162.                 #include "FurHelper.cginc"
  163.                
  164.                 ENDCG
  165.                
  166.             }
  167.             
  168.             Pass
  169.             {
  170.                 CGPROGRAM
  171.                
  172.                 #pragma vertex vert_base
  173.                 #pragma fragment frag_base
  174.                 #define FURSTEP 0.55
  175.                 #include "FurHelper.cginc"
  176.                
  177.                 ENDCG
  178.                
  179.             }
  180.             
  181.             Pass
  182.             {
  183.                 CGPROGRAM
  184.                
  185.                 #pragma vertex vert_base
  186.                 #pragma fragment frag_base
  187.                 #define FURSTEP 0.60
  188.                 #include "FurHelper.cginc"
  189.                
  190.                 ENDCG
  191.                
  192.             }
  193.             
  194.             Pass
  195.             {
  196.                 CGPROGRAM
  197.                
  198.                 #pragma vertex vert_base
  199.                 #pragma fragment frag_base
  200.                 #define FURSTEP 0.65
  201.                 #include "FurHelper.cginc"
  202.                
  203.                 ENDCG
  204.                
  205.             }
  206.             
  207.             Pass
  208.             {
  209.                 CGPROGRAM
  210.                
  211.                 #pragma vertex vert_base
  212.                 #pragma fragment frag_base
  213.                 #define FURSTEP 0.70
  214.                 #include "FurHelper.cginc"
  215.                
  216.                 ENDCG
  217.                
  218.             }
  219.             
  220.             Pass
  221.             {
  222.                 CGPROGRAM
  223.                
  224.                 #pragma vertex vert_base
  225.                 #pragma fragment frag_base
  226.                 #define FURSTEP 0.75
  227.                 #include "FurHelper.cginc"
  228.                
  229.                 ENDCG
  230.                
  231.             }
  232.             
  233.             Pass
  234.             {
  235.                 CGPROGRAM
  236.                
  237.                 #pragma vertex vert_base
  238.                 #pragma fragment frag_base
  239.                 #define FURSTEP 0.80
  240.                 #include "FurHelper.cginc"
  241.                
  242.                 ENDCG
  243.                
  244.             }
  245.             
  246.             Pass
  247.             {
  248.                 CGPROGRAM
  249.                
  250.                 #pragma vertex vert_base
  251.                 #pragma fragment frag_base
  252.                 #define FURSTEP 0.85
  253.                 #include "FurHelper.cginc"
  254.                
  255.                 ENDCG
  256.                
  257.             }
  258.             
  259.             Pass
  260.             {
  261.                 CGPROGRAM
  262.                
  263.                 #pragma vertex vert_base
  264.                 #pragma fragment frag_base
  265.                 #define FURSTEP 0.90
  266.                 #include "FurHelper.cginc"
  267.                
  268.                 ENDCG
  269.                
  270.             }
  271.             
  272.             Pass
  273.             {
  274.                 CGPROGRAM
  275.                
  276.                 #pragma vertex vert_base
  277.                 #pragma fragment frag_base
  278.                 #define FURSTEP 0.95
  279.                 #include "FurHelper.cginc"
  280.                
  281.                 ENDCG
  282.                
  283.             }
  284.             Pass
  285.             {
  286.                 CGPROGRAM
  287.                
  288.                 #pragma vertex vert_base
  289.                 #pragma fragment frag_base
  290.                 #define FURSTEP 1.00
  291.                 #include "FurHelper.cginc"
  292.                
  293.                 ENDCG
  294.                
  295.             }
  296.         }
  297.     }
  298. }
复制代码
Force 力

加力:全局力和局部力。

  1. Shader "Fur/FurForceShader"
  2. {
  3.     Properties
  4.     {
  5.         _Color ("Color", Color) = (1, 1, 1, 1)
  6.         _Specular ("Specular", Color) = (1, 1, 1, 1)
  7.         _Shininess ("Shininess", Range(0.01, 256.0)) = 8.0
  8.         
  9.         _MainTex ("Texture", 2D) = "white" { }
  10.         _FurTex ("Fur Pattern", 2D) = "white" { }
  11.         
  12.         _FurLength ("Fur Length", Range(0.0, 1)) = 0.5
  13.         _FurDensity ("Fur Density", Range(0, 2)) = 0.11
  14.         _FurThinness ("Fur Thinness", Range(0.01, 10)) = 1
  15.         _FurShading ("Fur Shading", Range(0.0, 1)) = 0.25
  16.         _ForceGlobal ("Force Global", Vector) = (0, 0, 0, 0)
  17.         _ForceLocal ("Force Local", Vector) = (0, 0, 0, 0)
  18.     }
  19.    
  20.     Category
  21.     {
  22.         Tags { "RenderType" = "Transparent" "IgnoreProjector" = "True" "Queue" = "Transparent" }
  23.         Cull Off
  24.         ZWrite On
  25.         Blend SrcAlpha OneMinusSrcAlpha
  26.         
  27.         SubShader
  28.         {
  29.             Pass
  30.             {
  31.                 CGPROGRAM
  32.                
  33.                 #pragma vertex vert_surface
  34.                 #pragma fragment frag_surface
  35.                 #define FURSTEP 0.00
  36.                 #include "FurHelper.cginc"
  37.                
  38.                 ENDCG
  39.                
  40.             }
  41.             Pass
  42.             {
  43.                 CGPROGRAM
  44.                
  45.                 #pragma vertex vert_base
  46.                 #pragma fragment frag_base
  47.                 #define FURSTEP 0.05
  48.                 #include "FurHelper.cginc"
  49.                
  50.                 ENDCG
  51.                
  52.             }
  53.             
  54.             Pass
  55.             {
  56.                 CGPROGRAM
  57.                
  58.                 #pragma vertex vert_base
  59.                 #pragma fragment frag_base
  60.                 #define FURSTEP 0.10
  61.                 #include "FurHelper.cginc"
  62.                
  63.                 ENDCG
  64.                
  65.             }
  66.             
  67.             Pass
  68.             {
  69.                 CGPROGRAM
  70.                
  71.                 #pragma vertex vert_base
  72.                 #pragma fragment frag_base
  73.                 #define FURSTEP 0.15
  74.                 #include "FurHelper.cginc"
  75.                
  76.                 ENDCG
  77.                
  78.             }
  79.             
  80.             Pass
  81.             {
  82.                 CGPROGRAM
  83.                
  84.                 #pragma vertex vert_base
  85.                 #pragma fragment frag_base
  86.                 #define FURSTEP 0.20
  87.                 #include "FurHelper.cginc"
  88.                
  89.                 ENDCG
  90.                
  91.             }
  92.             
  93.             Pass
  94.             {
  95.                 CGPROGRAM
  96.                
  97.                 #pragma vertex vert_base
  98.                 #pragma fragment frag_base
  99.                 #define FURSTEP 0.25
  100.                 #include "FurHelper.cginc"
  101.                
  102.                 ENDCG
  103.                
  104.             }
  105.             
  106.             Pass
  107.             {
  108.                 CGPROGRAM
  109.                
  110.                 #pragma vertex vert_base
  111.                 #pragma fragment frag_base
  112.                 #define FURSTEP 0.30
  113.                 #include "FurHelper.cginc"
  114.                
  115.                 ENDCG
  116.                
  117.             }
  118.             
  119.             Pass
  120.             {
  121.                 CGPROGRAM
  122.                
  123.                 #pragma vertex vert_base
  124.                 #pragma fragment frag_base
  125.                 #define FURSTEP 0.35
  126.                 #include "FurHelper.cginc"
  127.                
  128.                 ENDCG
  129.                
  130.             }
  131.             
  132.             Pass
  133.             {
  134.                 CGPROGRAM
  135.                
  136.                 #pragma vertex vert_base
  137.                 #pragma fragment frag_base
  138.                 #define FURSTEP 0.40
  139.                 #include "FurHelper.cginc"
  140.                
  141.                 ENDCG
  142.                
  143.             }
  144.             
  145.             Pass
  146.             {
  147.                 CGPROGRAM
  148.                
  149.                 #pragma vertex vert_base
  150.                 #pragma fragment frag_base
  151.                 #define FURSTEP 0.45
  152.                 #include "FurHelper.cginc"
  153.                
  154.                 ENDCG
  155.                
  156.             }
  157.             
  158.             Pass
  159.             {
  160.                 CGPROGRAM
  161.                
  162.                 #pragma vertex vert_base
  163.                 #pragma fragment frag_base
  164.                 #define FURSTEP 0.50
  165.                 #include "FurHelper.cginc"
  166.                
  167.                 ENDCG
  168.                
  169.             }
  170.             
  171.             Pass
  172.             {
  173.                 CGPROGRAM
  174.                
  175.                 #pragma vertex vert_base
  176.                 #pragma fragment frag_base
  177.                 #define FURSTEP 0.55
  178.                 #include "FurHelper.cginc"
  179.                
  180.                 ENDCG
  181.                
  182.             }
  183.             
  184.             Pass
  185.             {
  186.                 CGPROGRAM
  187.                
  188.                 #pragma vertex vert_base
  189.                 #pragma fragment frag_base
  190.                 #define FURSTEP 0.60
  191.                 #include "FurHelper.cginc"
  192.                
  193.                 ENDCG
  194.                
  195.             }
  196.             
  197.             Pass
  198.             {
  199.                 CGPROGRAM
  200.                
  201.                 #pragma vertex vert_base
  202.                 #pragma fragment frag_base
  203.                 #define FURSTEP 0.65
  204.                 #include "FurHelper.cginc"
  205.                
  206.                 ENDCG
  207.                
  208.             }
  209.             
  210.             Pass
  211.             {
  212.                 CGPROGRAM
  213.                
  214.                 #pragma vertex vert_base
  215.                 #pragma fragment frag_base
  216.                 #define FURSTEP 0.70
  217.                 #include "FurHelper.cginc"
  218.                
  219.                 ENDCG
  220.                
  221.             }
  222.             
  223.             Pass
  224.             {
  225.                 CGPROGRAM
  226.                
  227.                 #pragma vertex vert_base
  228.                 #pragma fragment frag_base
  229.                 #define FURSTEP 0.75
  230.                 #include "FurHelper.cginc"
  231.                
  232.                 ENDCG
  233.                
  234.             }
  235.             
  236.             Pass
  237.             {
  238.                 CGPROGRAM
  239.                
  240.                 #pragma vertex vert_base
  241.                 #pragma fragment frag_base
  242.                 #define FURSTEP 0.80
  243.                 #include "FurHelper.cginc"
  244.                
  245.                 ENDCG
  246.                
  247.             }
  248.             
  249.             Pass
  250.             {
  251.                 CGPROGRAM
  252.                
  253.                 #pragma vertex vert_base
  254.                 #pragma fragment frag_base
  255.                 #define FURSTEP 0.85
  256.                 #include "FurHelper.cginc"
  257.                
  258.                 ENDCG
  259.                
  260.             }
  261.             
  262.             Pass
  263.             {
  264.                 CGPROGRAM
  265.                
  266.                 #pragma vertex vert_base
  267.                 #pragma fragment frag_base
  268.                 #define FURSTEP 0.90
  269.                 #include "FurHelper.cginc"
  270.                
  271.                 ENDCG
  272.                
  273.             }
  274.             
  275.             Pass
  276.             {
  277.                 CGPROGRAM
  278.                
  279.                 #pragma vertex vert_base
  280.                 #pragma fragment frag_base
  281.                 #define FURSTEP 0.95
  282.                 #include "FurHelper.cginc"
  283.                
  284.                 ENDCG
  285.                
  286.             }
  287.             Pass
  288.             {
  289.                 CGPROGRAM
  290.                
  291.                 #pragma vertex vert_base
  292.                 #pragma fragment frag_base
  293.                 #define FURSTEP 1.00
  294.                 #include "FurHelper.cginc"
  295.                
  296.                 ENDCG
  297.                
  298.             }
  299.         }
  300.     }
  301. }
复制代码
Rim Color 轮辋颜色

Add rim color 添加边缘颜色

  1. Shader "Fur/FurRimColorShader"
  2. {
  3.     Properties
  4.     {
  5.         _Color ("Color", Color) = (1, 1, 1, 1)
  6.         _Specular ("Specular", Color) = (1, 1, 1, 1)
  7.         _Shininess ("Shininess", Range(0.01, 256.0)) = 8.0
  8.         
  9.         _MainTex ("Texture", 2D) = "white" { }
  10.         _FurTex ("Fur Pattern", 2D) = "white" { }
  11.         
  12.         _FurLength ("Fur Length", Range(0.0, 1)) = 0.5
  13.         _FurDensity ("Fur Density", Range(0, 2)) = 0.11
  14.         _FurThinness ("Fur Thinness", Range(0.01, 10)) = 1
  15.         _FurShading ("Fur Shading", Range(0.0, 1)) = 0.25
  16.         _ForceGlobal ("Force Global", Vector) = (0, 0, 0, 0)
  17.         _ForceLocal ("Force Local", Vector) = (0, 0, 0, 0)
  18.         
  19.         _RimColor ("Rim Color", Color) = (0, 0, 0, 1)
  20.         _RimPower ("Rim Power", Range(0.0, 8.0)) = 6.0
  21.     }
  22.    
  23.     Category
  24.     {
  25.         Tags { "RenderType" = "Transparent" "IgnoreProjector" = "True" "Queue" = "Transparent" }
  26.         Cull Off
  27.         ZWrite On
  28.         Blend SrcAlpha OneMinusSrcAlpha
  29.         
  30.         SubShader
  31.         {
  32.             Pass
  33.             {
  34.                 CGPROGRAM
  35.                
  36.                 #pragma vertex vert_surface
  37.                 #pragma fragment frag_surface
  38.                 #define FURSTEP 0.00
  39.                 #include "FurHelper.cginc"
  40.                
  41.                 ENDCG
  42.                
  43.             }
  44.             Pass
  45.             {
  46.                 CGPROGRAM
  47.                
  48.                 #pragma vertex vert_base
  49.                 #pragma fragment frag_base
  50.                 #define FURSTEP 0.05
  51.                 #include "FurHelper.cginc"
  52.                
  53.                 ENDCG
  54.                
  55.             }
  56.             
  57.             Pass
  58.             {
  59.                 CGPROGRAM
  60.                
  61.                 #pragma vertex vert_base
  62.                 #pragma fragment frag_base
  63.                 #define FURSTEP 0.10
  64.                 #include "FurHelper.cginc"
  65.                
  66.                 ENDCG
  67.                
  68.             }
  69.             
  70.             Pass
  71.             {
  72.                 CGPROGRAM
  73.                
  74.                 #pragma vertex vert_base
  75.                 #pragma fragment frag_base
  76.                 #define FURSTEP 0.15
  77.                 #include "FurHelper.cginc"
  78.                
  79.                 ENDCG
  80.                
  81.             }
  82.             
  83.             Pass
  84.             {
  85.                 CGPROGRAM
  86.                
  87.                 #pragma vertex vert_base
  88.                 #pragma fragment frag_base
  89.                 #define FURSTEP 0.20
  90.                 #include "FurHelper.cginc"
  91.                
  92.                 ENDCG
  93.                
  94.             }
  95.             
  96.             Pass
  97.             {
  98.                 CGPROGRAM
  99.                
  100.                 #pragma vertex vert_base
  101.                 #pragma fragment frag_base
  102.                 #define FURSTEP 0.25
  103.                 #include "FurHelper.cginc"
  104.                
  105.                 ENDCG
  106.                
  107.             }
  108.             
  109.             Pass
  110.             {
  111.                 CGPROGRAM
  112.                
  113.                 #pragma vertex vert_base
  114.                 #pragma fragment frag_base
  115.                 #define FURSTEP 0.30
  116.                 #include "FurHelper.cginc"
  117.                
  118.                 ENDCG
  119.                
  120.             }
  121.             
  122.             Pass
  123.             {
  124.                 CGPROGRAM
  125.                
  126.                 #pragma vertex vert_base
  127.                 #pragma fragment frag_base
  128.                 #define FURSTEP 0.35
  129.                 #include "FurHelper.cginc"
  130.                
  131.                 ENDCG
  132.                
  133.             }
  134.             
  135.             Pass
  136.             {
  137.                 CGPROGRAM
  138.                
  139.                 #pragma vertex vert_base
  140.                 #pragma fragment frag_base
  141.                 #define FURSTEP 0.40
  142.                 #include "FurHelper.cginc"
  143.                
  144.                 ENDCG
  145.                
  146.             }
  147.             
  148.             Pass
  149.             {
  150.                 CGPROGRAM
  151.                
  152.                 #pragma vertex vert_base
  153.                 #pragma fragment frag_base
  154.                 #define FURSTEP 0.45
  155.                 #include "FurHelper.cginc"
  156.                
  157.                 ENDCG
  158.                
  159.             }
  160.             
  161.             Pass
  162.             {
  163.                 CGPROGRAM
  164.                
  165.                 #pragma vertex vert_base
  166.                 #pragma fragment frag_base
  167.                 #define FURSTEP 0.50
  168.                 #include "FurHelper.cginc"
  169.                
  170.                 ENDCG
  171.                
  172.             }
  173.             
  174.             Pass
  175.             {
  176.                 CGPROGRAM
  177.                
  178.                 #pragma vertex vert_base
  179.                 #pragma fragment frag_base
  180.                 #define FURSTEP 0.55
  181.                 #include "FurHelper.cginc"
  182.                
  183.                 ENDCG
  184.                
  185.             }
  186.             
  187.             Pass
  188.             {
  189.                 CGPROGRAM
  190.                
  191.                 #pragma vertex vert_base
  192.                 #pragma fragment frag_base
  193.                 #define FURSTEP 0.60
  194.                 #include "FurHelper.cginc"
  195.                
  196.                 ENDCG
  197.                
  198.             }
  199.             
  200.             Pass
  201.             {
  202.                 CGPROGRAM
  203.                
  204.                 #pragma vertex vert_base
  205.                 #pragma fragment frag_base
  206.                 #define FURSTEP 0.65
  207.                 #include "FurHelper.cginc"
  208.                
  209.                 ENDCG
  210.                
  211.             }
  212.             
  213.             Pass
  214.             {
  215.                 CGPROGRAM
  216.                
  217.                 #pragma vertex vert_base
  218.                 #pragma fragment frag_base
  219.                 #define FURSTEP 0.70
  220.                 #include "FurHelper.cginc"
  221.                
  222.                 ENDCG
  223.                
  224.             }
  225.             
  226.             Pass
  227.             {
  228.                 CGPROGRAM
  229.                
  230.                 #pragma vertex vert_base
  231.                 #pragma fragment frag_base
  232.                 #define FURSTEP 0.75
  233.                 #include "FurHelper.cginc"
  234.                
  235.                 ENDCG
  236.                
  237.             }
  238.             
  239.             Pass
  240.             {
  241.                 CGPROGRAM
  242.                
  243.                 #pragma vertex vert_base
  244.                 #pragma fragment frag_base
  245.                 #define FURSTEP 0.80
  246.                 #include "FurHelper.cginc"
  247.                
  248.                 ENDCG
  249.                
  250.             }
  251.             
  252.             Pass
  253.             {
  254.                 CGPROGRAM
  255.                
  256.                 #pragma vertex vert_base
  257.                 #pragma fragment frag_base
  258.                 #define FURSTEP 0.85
  259.                 #include "FurHelper.cginc"
  260.                
  261.                 ENDCG
  262.                
  263.             }
  264.             
  265.             Pass
  266.             {
  267.                 CGPROGRAM
  268.                
  269.                 #pragma vertex vert_base
  270.                 #pragma fragment frag_base
  271.                 #define FURSTEP 0.90
  272.                 #include "FurHelper.cginc"
  273.                
  274.                 ENDCG
  275.                
  276.             }
  277.             
  278.             Pass
  279.             {
  280.                 CGPROGRAM
  281.                
  282.                 #pragma vertex vert_base
  283.                 #pragma fragment frag_base
  284.                 #define FURSTEP 0.95
  285.                 #include "FurHelper.cginc"
  286.                
  287.                 ENDCG
  288.                
  289.             }
  290.             Pass
  291.             {
  292.                 CGPROGRAM
  293.                
  294.                 #pragma vertex vert_base
  295.                 #pragma fragment frag_base
  296.                 #define FURSTEP 1.00
  297.                 #include "FurHelper.cginc"
  298.                
  299.                 ENDCG
  300.                
  301.             }
  302.         }
  303.     }
  304. }
复制代码
二、URP

下载

https://github.com/hecomi/UnityFurURP
几只毛发着色器实现的示例

这是通用渲染管道中毛发着色器实现的示例。它包括以下功能:


  • 3种方法(壳/鳍/毛发多边形)(Shell / Fin / Fur Polygon)
  • 1利用几何着色器(和Fin的细分)的通道
  • Lit / Unlit 点亮/未点亮
  • 利用法线贴图进行照明计算
  • 边缘光照
  • 动画动作
Shell 壳


Fin 翅片


Fur Polygon 毛发多边形


Compare 比力


Move 移动



完结

赠人玫瑰,手有余香!假如文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然假如你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
好了,我是向宇,https://xiangyu.blog.csdn.net
一位在小公司冷静奋斗的开发者,闲暇之余,边学习边记载分享,站在巨人的肩膀上,通过学习前辈们的履历总是会给我许多帮助和开导!假如你遇到任何题目,也欢迎你评论私信或者加群找我, 虽然有些题目我也不一定会,但是我会查阅各方资料,争取给出最好的建议,盼望可以帮助更多想学编程的人,共勉~


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表