当前位置:   article > 正文

Unity Shader(九)压缩和混合纹理贴图_unity地形材质混合效果

unity地形材质混合效果

效果说明示例: 

 使用纹理贴图示例:

混合系数贴图示例:

  1. Shader "Custom/BasicDiffuse"
  2. {
  3. //属性
  4. Properties
  5. {
  6. _MainTint("Diffuse Tint",Color)=(1,1,1,1)
  7. _ColorA("Terrain Color A",Color)=(1,1,1,1)
  8. _ColorB("Terrain Color B",Color)=(1,1,1,1)
  9. _RTexture("Red Channel Texture",2D) = ""{}
  10. _GTexture("Green Channel Texture",2D) = ""{}
  11. _BTexture("Blue Channel Texture",2D) = ""{}
  12. _ATexture("Alpha Channel Texture",2D) = ""{}
  13. _BlendTex("Blend Texture",2D) = ""{}
  14. }
  15. SubShader
  16. {
  17. //渲染类型为不透明物体
  18. Tags{"RenderType" = "Opaque"}
  19. //层级细节
  20. LOD 200
  21. CGPROGRAM
  22. //编译指令,定义表面着色器和将要使用的光照模型Lambert(漫反射)
  23. #pragma surface surf Lambert
  24. //声明属性关联
  25. float4 _MainTint;
  26. float4 _ColorA;
  27. float4 _ColorB;
  28. sampler2D _RTexture;
  29. sampler2D _GTexture;
  30. sampler2D _BTexture;
  31. sampler2D _ATexture;
  32. sampler2D _BlendTex;
  33. //表面着色器输入结构体
  34. struct Input
  35. {
  36. //纹理的UV坐标值
  37. float2 uv_RTexture;
  38. float2 uv_GTexture;
  39. float2 uv_BTexture;
  40. float2 uv_ATexture;
  41. float2 uv_BlendTex;
  42. };
  43. //表面着色器
  44. void surf(Input IN, inout SurfaceOutput o)
  45. {
  46. float4 blendData = tex2D(_BlendTex, IN.uv_BlendTex);
  47. float4 rTexData = tex2D(_RTexture, IN.uv_BlendTex);
  48. float4 gTexData = tex2D(_GTexture, IN.uv_BlendTex);
  49. float4 bTexData = tex2D(_BTexture, IN.uv_BlendTex);
  50. float4 aTexData = tex2D(_ATexture, IN.uv_BlendTex);
  51. //使用线性插值对纹理进行混合
  52. float4 finalColor;
  53. finalColor = lerp(rTexData, gTexData, blendData.g);
  54. finalColor = lerp(finalColor, bTexData, blendData.g);
  55. finalColor = lerp(finalColor, aTexData, blendData.g);
  56. finalColor.a = 1.0;
  57. //将混合纹理与色调值相乘,并使用红色通道来确定两个不同地形将形成怎样的色调
  58. float4 terrainLayers = lerp(_ColorA, _ColorB, blendData.r);
  59. finalColor *= terrainLayers;
  60. finalColor = saturate(finalColor);
  61. o.Albedo = finalColor.rgb * _MainTint.rgb;
  62. o.Alpha = finalColor.a;
  63. }
  64. ENDCG
  65. }
  66. FallBack "Diffuse"
  67. }

材质球设置

效果图:

lerp()函数

lerp(a,b,f) ---功能描述--->(1-f)*a+b*f

效果示例:

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号