- Home /
How to access array elements in Surface Vertex shaders?
Hi I'm having trouble accessing elements from an array I'm passing into a custom surface shader, here's the properties and the vertex function of the shader, I've checked and the index I get is correct, however the array doesn't seem to work, Is this incorrect syntax? Or is this not even possible? I thought I'd read that is was
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
_EmissionColor ("Emission",Color) = (1,1,1,1)
_Age ("Age",float) = 0.0
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows vertex:vert
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _MainTex;
half _Glossiness;
half _Metallic;
fixed4 _Color;
half3 _EmissionColor;
float _Age;
float3 _Velocity[982];
void vert (inout appdata_full v) {
int index = v.texcoord1[0];
float3 vel = _Velocity[index];
v.vertex.xyz = vel;
}//surface function code here...
Here's my code for setting the array, is this correct? (I know that the index will only go up to 982) Thanks in advance!
for (int i=0; i<982; i++) {
Vector3 tmp = new Vector3();
tmp.x = m_velocities[i].r;
tmp.y = m_velocities[i].g;
tmp.z = m_velocities[i].b;
tmpMat.SetVector("_Velocity"+i.ToString(),tmp);
}
Your answer
Follow this Question
Related Questions
Issue with the merging of a surface shader and vert/frag shader using UNITY_MATRIX_MVP 0 Answers
Surface Shader vertex displacement, shadows not moving 1 Answer
Surface shader + Instancing -> Invalid subscript 'texcoord' in generated code 1 Answer
How to convert surface shader to Vertex/Fragment code? 0 Answers
is it possible to define multiple vertex/fragment shader in one pass? 1 Answer