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宏来初始化我们的插值子。那样的话,我们的代码就可以编译成功了。
UNITY_INITIALIZE_OUTPUT(UnityGI,gi) gi.light.color = _LightColor0; gi.light.dir = _WorldSpaceLightPos0; // 光照方向 gi.indirect.diffuse = 0; //漫反射 gi.indirect.specular = 0; // 高光 UnityGIInput giInput; UNITY_INITIALIZE_OUTPUT(UnityGIInput,giInput) ...
UNITY_INITIALIZE_OUTPUT(type,name)将给定_类型_的变量_名称_初始化为零。 UNITY_COMPILER_HLSL,UNITY_COMPILER_HLSL2GLSL,UNITY_COMPILER_CG指示正在使用哪个着色器编译器来编译着色器。有关更多详细信息,请参阅有关着色器编译的文档。如果遇到编译器之间有非常具体的着色器语法处理差异,并希望为每个编译器编写不同...
Output:输出Context用来渲染粒子,它决定了生成粒子的类型、纹理、颜色、朝向等等。一个System可以有多个output输出。 主要负责粒子的渲染,如颜色、形状等。 每个context所连接的并非唯一,比如一个Spawn可以连接多个Initialize,朝多个不同的方向发射粒子。 总得来说VEG使用起来还是比较容易,其设计相当符合人的直觉,如果之前...
UNITY_INITIALIZE_OUTPUT(appdata, v); v.vertex = vi[0].pos * bary.x + vi[1].pos * bary.y + vi[2].pos * bary.z; v.tangent = vi[0].tangent * bary.x + vi[1].tangent * bary.y + vi[2].tangent * bary.z; v.normal = vi[0].normal * bary.x + vi[1].normal * bary...