UNITY_INITIALIZE_OUTPUT(type,name) –此宏用于将给定类型的名称变量初始化为零。在使用旧版标准所写的Shader时,经常会报错“Try adding UNITY_INITIALIZE_OUTPUT(Input,o); like this in your vertfunction.”之类的错误,加上这句就不会报错了。
#ifdefined(UNITY_COMPILER_HLSL)#defineUNITY_INITIALIZE_OUTPUT(type,name) name = (type)0;#else#defineUNITY_INITIALIZE_OUTPUT(type,name)#endif 只有在HLSL编译器编译时,它才工作,初始化name参数,否则编译器可能会报如下错误: “Shader error in 'Jie/Test': 'vert': output parameter 'o' not completely...
UNITY_INITIALIZE_OUTPUT(type,name) –此宏用于将给定类型的名称变量初始化为零。在使用旧版标准所写的Shader时,经常会报错“Try adding UNITY_INITIALIZE_OUTPUT(Input,o); like this in your vertfunction.”之类的错误,加上这句就不会报错了。
方法/步骤 1 双击红框指定的错误,使用Visual Studio打开并快速定位到报错的着色器函数 2 我们可以看到vert函数的定义,第二个参数是一个输出参数 3 在vert函数中加入一句UNITY_INITIALIZE_OUTPUT(Input,参数名);即可
人们通常不会注意到这个问题,因为Unity的标准着色器使用UNITY_INITIALIZE_OUTPUT宏来完全地初始化它的插值子结构体。因为我们不使用这个宏,所以出现了问题。为了解决它,我们使用UNITY_INITIALIZE_OUTPUT宏来初始化我们的插值子。那样的话,我们的代码就可以编译成功了。
人们通常不会注意到这个问题,因为Unity的标准着色器使用UNITY_INITIALIZE_OUTPUT宏来完全地初始化它的插值子结构体。因为我们不使用这个宏,所以出现了问题。为了解决它,我们使用UNITY_INITIALIZE_OUTPUT宏来初始化我们的插值子。那样的话,我们的代码就可以编译成功了。
Output:输出Context用来渲染粒子,它决定了生成粒子的类型、纹理、颜色、朝向等等。一个System可以有多个output输出。 主要负责粒子的渲染,如颜色、形状等。 每个context所连接的并非唯一,比如一个Spawn可以连接多个Initialize,朝多个不同的方向发射粒子。 总得来说VEG使用起来还是比较容易,其设计相当符合人的直觉,如果之前...
3 UNITY_INITIALIZE_OUTPUT(Input, o); 4 5 6 7 TANGENT_SPACE_ROTATION ; 8 9 o.tan1 = mul(rotation,UNITY_MATRIX_IT_MV[0].xyz); 10 11 o.tan2 = mul(rotation,UNITY_MATRIX_IT_MV[1].xyz); 12 13 } 1. 2. 3. 4. 5. 6. ...
void vert(inout appdata_full v, out Input o) { //使用Unity内置的 UNITY_INITIALIZE_OUTPUT 宏对输出结构体o进行初始化 UNITY_INITIALIZE_OUTPUT(Input o); //... } DirectX 9/11 也不支持在顶点着色器中使用 tex2D 函数,因为在顶点着色器阶段Shader无法得到UV编导,如果要在顶点着色器中访问纹理,需要使...
UNITY_INITIALIZE_OUTPUT(Input,o); o.customColor = abs(v.normal); } sampler2D _MainTex; void surf (Input IN, inout SurfaceOutput o) { o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; o.Albedo *= IN.customColor; } ENDCG }