UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); 3)初始化 UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); VertexPositionInputs vertexInput = GetVertexPositionInputs(input.positionOS.xy...
UNITY_TRANSFER_INSTANCE_ID(v,o); 第四步,在片元着色器开头添加如下代码,从输入结构体i中读取instance的元素,让片元着色器能够访问并使用Instance的属性. UNITY_SETUP_INSTANCE_ID(i); 好了,到这里就做完了,已经给Shader添加了GPU Instance的支持. 点开使用该Shader的材质球面板,已经有Enable GPU Instancing的勾...
UNITY_SETUP_INSTANCE_ID(v); VertexOutputForwardBase o; UNITY_INITIALIZE_OUTPUT(VertexOutputForwardBase, o); UNITY_TRANSFER_INSTANCE_ID(v, o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); float4 posWorld=mul(unity_ObjectToWorld, v.vertex);#ifUNITY_REQUIRE_FRAG_WORLDPOS#ifUNITY_PACK_WORLDPOS_WIT...
WarmupAllShaders完全加载所有着色器,以防未来性能中断。 继承的成员 变量 hideFlags该对象应该隐藏、随场景一起保存还是由用户修改? name对象的名称。 公共函数 GetInstanceID返回对象的实例 ID。 ToString返回对象的名称。 静态函数 Destroy移除 GameObject、组件或资源。
UNITY_VERTEX_INPUT_INSTANCE_ID };structv2f { float4 vertex : SV_POSITION; fixed4 color : COLOR; float2 texcoord : TEXCOORD0; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert(appdata v) { v2f o; UNITY_SETUP_INSTANCE_ID(v); ...
UNITY_SETUP_INSTANCE_ID(v); i.pos = UnityObjectToClipPos(v.vertex); … } 1. 2. 3. 4. 5. 6. 7. UNITY_SETUP_INSTANCE_ID宏展开如下: // - UNITY_SETUP_INSTANCE_ID Should be used at the very beginning of the vertex shader / fragment shader, ...
UNITY_SETUP_INSTANCE_ID(i);// necessary only if any instanced properties are going to be accessed in the fragment Shader. returntex2D(_MainTex,i.uv)*UNITY_ACCESS_INSTANCED_PROP(Props,_Color); } ENDCG } } } 所以,静态不动的物体就没必要用上面的方法了,于是我又测试了Graphics.DrawMeshInstan...
对比固定管线和可编程shader的基础结构 固定管线shader和可编程shader的基础结构是一样的,只是Render Setup部分不同。 Render Setup语法 1. 固定管线shader 使用ShaderLab命令组成Render Setup代码。 2. 可编程shader 使用CG/HLSL语言编写Render Setup代码。
Create->Shader->StandardSurfaceShader(Instanced) 1. 可以创建一个标准表面着色器(instance),下面是此着色器中的一段代码 (PS: 我所实验的是Unity 5.5的版本,而Unity5.6中已经没有这个选项,同时Unity5.6在材质属性面板中有一个Enable Instance Variants 勾选项,勾选表示支持Instance) ...
//只有当你需要在Fragment Shader中访问每个Instance独有的属性时才需要写这个宏。UNITY_TRANSFER_INSTANCE_ID(v,o);o.vertex=UnityObjectToClipPos(v.vertex);returno;}fixed4frag(v2f i):SV_Target{//这个宏让Instance ID在Shader函数里能够被访问到//要想访问独有属性必须调用这个宏UNITY_SETUP_INSTANCE_ID...