查看: 1746|回复: 1
打印 上一主题 下一主题

[Shaders] 波形效果的shader

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-9-30 00:54:06 |只看该作者 |倒序浏览
  1. Shader "LexLiu/VertexColorTransform" //顶点颜色变换{
  2.     Properties
  3.     {
  4.         _MainColor("Main Color", Color) = (1,1,1,1)
  5.         //_CubeMap("Cube Map", CUBE) = ""{}
  6.         _ReflectAmount("Reflect Amount", Float) = 1
  7.         _RimColorMultiply("Rim Color Multiply", Float) = 0
  8.         _RimPower("Rim Power", Float) = 1
  9.         _ReflFresnelPower("Reflect Fresnel Power", Float) = 1
  10.         _ReflFresnelOffset("Reflect Fresnel Offset", Float) = 0
  11.         _WaveLength("Wave Length", Float) = 1
  12.         _WaveStrenth("Wave Strenth", Float) = 1
  13.         _WaveOffset("Wave Offset", Float) = 0
  14.         _StartPos("Start Position", Vector) = (0,0,0,0)
  15.         _TargetColor("Target Color", Color) = (1,1,1,1)
  16.         _OcclusionStrength("DarkColor Strength", Float) = 1
  17.         _OcclusionOffset("DarkColor Offset", Float) = 0
  18.         _FinalColorAdjust("FinalColorAdjust", Float) = 1.3
  19.     }
  20.     SubShader
  21.     {
  22.         Tags { "RenderType"="Opaque" "IgnoreProjector"="True"}
  23.         CGINCLUDE
  24.         #pragma vertex vert
  25.         #pragma fragment frag
  26.         #pragma fragmentoption ARB_precision_hint_fastest
  27.         #pragma exclude_renderers xbox360 ps3 flash d3d11_9x
  28.         fixed4 _MainColor;
  29.         samplerCUBE _CubeMap;
  30.         fixed _ReflectAmount;
  31.         half _ReflFresnelPower;
  32.         half _ReflFresnelOffset;
  33.         half _RimColorMultiply;
  34.         half _RimPower;
  35.         half _WaveLength;
  36.         half _WaveStrenth;
  37.         half _WaveOffset;
  38.         float4 _StartPos;
  39.         fixed4 _TargetColor;
  40.         fixed _OcclusionStrength;
  41.         float _OcclusionOffset;
  42.         float _FinalColorAdjust;
  43.          
  44.         fixed4 _LightColor0;
  45.         struct VertexInput
  46.         {
  47.             float4 vertexOSITION;
  48.             fixed3 normal:NORMAL;
  49.         };
  50.         struct VertexOutput
  51.         {
  52.             float4 pos:SV_POSITION;
  53.             fixed4 reflectDir:TEXCOORD0;
  54.             fixed3 lightColor:TEXCOORD1;
  55.             fixed rimMultiply:TEXCOORD2;
  56.             fixed3 transColor:TEXCOORD3;
  57.             float4 worldPos:TEXCOORD4;
  58.         };
  59.         VertexOutput vert(VertexInput v)
  60.         {
  61.             VertexOutput output;
  62.             //vertex offset
  63.             fixed pi = 3.1415926535898;
  64.             half dist = distance(_StartPos.xyz, mul(_Object2World, v.vertex).xyz);
  65.             half x = (_WaveOffset - dist) * _WaveLength;
  66.             half normalOffset = (sin(x + pi*0.5) + 1) * _WaveStrenth;
  67.             normalOffset = (x > -pi && x < pi) ? normalOffset : 0;
  68.             float4 worldPos = mul(_Object2World, v.vertex);
  69.             worldPos.xyz += float3(mul(_Object2World, fixed4(v.normal,0)).xyz) * normalOffset;
  70.             output.pos = mul(UNITY_MATRIX_VP, worldPos);
  71.             x = saturate(x*0.25+0.5);
  72.             output.transColor = lerp(_MainColor.rgb, _TargetColor.rgb, x);
  73.             output.worldPos = worldPos;
  74.             //light & color
  75.             fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
  76.             fixed3 normalDir = normalize(mul(_Object2World, float4(v.normal, 0)).xyz);
  77.             output.lightColor = _LightColor0.rgb * (dot(lightDir, normalDir) * 0.5 + 0.5) + UNITY_LIGHTMODEL_AMBIENT.rgb;
  78.             fixed3 viewDir = normalize(float3((_WorldSpaceCameraPos - mul(_Object2World, v.vertex)).xyz));
  79.             fixed NdotV = dot(normalDir, viewDir);
  80.             output.reflectDir.xyz = reflect(-viewDir, normalDir);
  81.             output.reflectDir.w = _ReflectAmount * pow(1-NdotV, _ReflFresnelPower) + _ReflFresnelOffset;
  82.             output.rimMultiply = pow(1-NdotV, _RimPower) * _RimColorMultiply;
  83.             
  84.             return output;
  85.         }
  86.         fixed4 frag(VertexOutput i):COLOR
  87.         {
  88.             fixed4 c = fixed4(0,0,0,1);
  89.             fixed3 cubeColor = texCUBE(_CubeMap, i.reflectDir.xyz).rgb * i.reflectDir.w;
  90.             c.rgb = (i.transColor.rgb + cubeColor + i.transColor.rgb * i.rimMultiply) * i.lightColor;
  91.             //final color
  92.             c.rgb = c.rgb * saturate((i.worldPos.y + _OcclusionOffset) * _OcclusionStrength) * _FinalColorAdjust;
  93.             return c;
  94.         }
  95.         ENDCG
  96.         Pass
  97.         {
  98.             Tags{"LightMode"="ForwardBase"}
  99.             CGPROGRAM
  100.             #define UNITY_PASS_FORWARDBASE
  101.             #define multi_compile_fwdbase_fullshadows
  102.             ENDCG
  103.         }
  104.     }
  105. }
复制代码
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

0

主题

1

听众

1120

积分

助理设计师

Rank: 4

纳金币
6
精华
0
沙发
发表于 2015-9-30 12:54:12 |只看该作者
有截图的话是最好的了
回复

使用道具 举报

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

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-28 20:48 , Processed in 0.083059 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部