You can declare any variable in a shader and set it from cpu code without adding the uniform keyword. In Shader: float _MyValue; In C#: myMaterial.SetFloat("_MyValue", 12.34f); Does declaring _MyValue as uniform have any effect? What does this do? uniform float _MyValue The docs say you can use it, but it's not necessary. Why do people use it?