赞
踩
我们来解析一下上篇文章中提到的 Batching 中的 动态合批
动态合批是Unity默认去执行的,我们无法控制中间的步骤,我们只能按照Unity指定的规则去做
什么情况下会产生材质实例呢?
在之前使用协程控制Shader材质变化的文章中,修改材质使用 .material 来修改会导致生成材质实例
这里的顶点属性,指的是 顶点位置信息、顶点法线信息、顶点切线信息 等这些属性
可以在Mesh信息中,了解到入下信息:
Shader "MyShader/P2_6_2" { Properties { } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag (v2f i) : SV_Target { return 1; } ENDCG } } }
原因是:该球体的Mesh顶点数超过了300,不支持动态合批
如果这几个属性只是在Shader的appdata中声明,并不算真正的用到该属性
Shader "MyShader/P2_6_2" { Properties { _Color("Color",Color) = (1,1,1,1) } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; float3 normal : NORMAL; float3 tangent : TANGENT; float2 uv1 : TEXCOORD1; }; struct v2f { float2 uv : TEXCOORD0; float4 pos : SV_POSITION; float2 uv1 : TEXCOORD1; float3 normal : TEXCOORD2; float3 tangent : TEXCOORD3; float3 worldPos : TEXCOORD4; }; fixed4 _Color; v2f vert (appdata v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.worldPos = mul(unity_ObjectToWorld,v.vertex); o.uv = v.uv; o.uv1 = v.uv1; o.normal = v.normal; o.tangent = v.tangent; return o; } fixed4 frag (v2f i) : SV_Target { return i.worldPos.y * 0.15 + _Color; } ENDCG } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。