unity-shader-max导出多套uv给unity使用
在看 GPU Gems 2 的 草 的时候, 看到里面的 风 在影响顶点的时候, 这个技巧是在顶点定义中带一个混合权重 (参考: [《GPU%20Gems%202》全书提炼总结/Part1#124-风](https://github.com/QianMo/Game-Programmer-Study-Notes/tree/master/Content/《GPU Gems 2》全书提炼总结/Part1#124-风)) , 那么这个 权重 就可以放在 顶点色 或 uv 中. 如果放在 uv 中, 那么久需要多套 uv 了.
前篇
unity 目前只支持顶点存 四套uv. (从源码上看出来)
| 1 | namespace UnityEngine.Rendering { | 
shader graph 中也可以看出来

max 添加多套 uv
- 添加一个 uv展开 修改器, 贴图通道 默认指定为1 (也就是第一套 uv), 然后编辑 uv, 编辑完 塌陷 这个修改器. 第一套 uv 制作完 
- 再添加一个 uv展开 修改器, 贴图通道 指定为2 (也就是第二套 uv), 此时会谈个提示框, 选择 放弃 ( 选择 移动 的话会把之前的 uv 移到第二套 uv 上), 然后编辑 uv, 编辑完 塌陷 这个修改器. 第二套 uv 制作完. 
 如此类推可以继续添加多套 uv, 如果第二套 uv 想在第一套的基础上修改, 可以在 第一套 uv 中保存一下, 在编辑第二套 uv 时加载进来.
- 丢到 unity 中, 可以看到模型里包含的几套uv ( uv,uv2,uv3… )  
unity 使用多套 uv
- shader, 拿最简单的 unlit shader 改一下 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65- Shader "test/multiUV" { 
 Properties {
 _MainTex ("Texture", 2D) = "white" {}
 [KeywordEnum(UV0, UV1, UV2)] _UVSet ("UV Set for textures", Float) = 0
 }
 SubShader {
 Tags { "RenderType"="Opaque" }
 LOD 100
 Pass {
 CGPROGRAM
 
 
 // make fog work
 
 
 
 struct appdata {
 float4 vertex : POSITION;
 float2 texUV0 : TEXCOORD0;
 float2 texUV1 : TEXCOORD1; // 多套uv的语义声明
 float2 texUV2 : TEXCOORD2;
 };
 struct v2f {
 float2 uv : TEXCOORD0;
 UNITY_FOG_COORDS(1)
 float4 vertex : SV_POSITION;
 };
 sampler2D _MainTex;
 float4 _MainTex_ST;
 half _UVSet;
 v2f vert (appdata v) {
 v2f o;
 
 
 float2 dstUv = v.texUV0;
 
 float2 dstUv = v.texUV1;
 
 float2 dstUv = v.texUV2;
 
 o.vertex = UnityObjectToClipPos(v.vertex);
 o.uv = TRANSFORM_TEX(dstUv, _MainTex);
 UNITY_TRANSFER_FOG(o,o.vertex);
 return o;
 }
 fixed4 frag (v2f i) : SV_Target {
 fixed4 col = tex2D(_MainTex, i.uv);
 UNITY_APPLY_FOG(i.fogCoord, col);
 return col;
 }
 
 ENDCG
 }
 }
 }
- 效果 