Я думаю, что я понял, что вы пытаетесь сделать, и
Это не так, как все работает, извините
Собирая воедино ваши комментарии и вопросы, это то, что я думаю, что выпытаясь возиться с:
void surf (Input IN, inout SurfaceOutput o) {
_Color = (0,0,0,0); //trying turn to black just for a test, and nothing happens
}
Это не делает то, что вы думаете, что делает. Эта строка устанавливает this _Color
:
#pragma target 3.0
sampler2D _MainTex;
fixed4 _Color;
fixed _Cutoff; //here
Not this:
Properties {
_Color ("Color", Color) = (1,1,1,1) //here
[PerRendererData]_MainTex ("Sprite Texture", 2D) = "white" {}
_Cutoff("Shadow alpha cutoff", Range(0,1)) = 0.5
}
Этот второй - то, что показано напанель инспектора и ее связь с блоком CGPROGRAM фактически односторонние, потому что frag
surf
и geom
все вызываются несколько раз параллельно и полагаются на получение одних и тех же данных, поэтому Properties
значение считывается в CGPROGRAM, а значения CGPROGRAM отбрасываются, когда это делается.
Я не думаю, что есть любой способ, которым вы можете заставить шейдер CGPROGRAM делать все, что вы можете прочитать изC # (поскольку этот код выполняется сотни раз за кадр, как вы узнаете , какой из них для чтения?)
Я знаю, что вы можете получить свойства (включая изменение свойства для одного экземпляра или для всех экземпляров), но не базовых данных CGPROGRAM. Единственный способ, который я могу даже обойти, - это рендерить в текстуру, а затем читать данные текстуры, и это будет медленно (и снова вы попадаете в «какой пиксель имеет желаемое значение»?)