You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
作者你好!我又来麻烦你了,这回又有2个问题。
你还记的Unity Shaders and Effects Cookbook这本书第2章第4节的混合纹理吗?我用片元着色器改写之后,用在项目中,前天出了个新问题。
这个场景在iPhone和三星的Pad上都运行正常,但在小米note3上运行,会报错:
09-05 11:31:18.441 25728-25754/com.seawar.i4 I/Adreno: ERROR: 0:116: 'phase0_gl_Position' : undeclared identifier
ERROR: 0:116: 'x' : field selection requires structure, vector, or matrix on left hand side
ERROR: 0:117: 'y' : field selection requires structure, vector, or matrix on left hand side
ERROR: 0:118: 'z' : field selection requires structure, vector, or matrix on left hand side
ERROR: 0:119: 'w' : field selection requires structure, vector, or matrix on left hand side
ERROR: 5 compilation errors. No code generated.
我查了下,发现Shader被编译后的phase0_gl_Position变量没被定义。为了弄清楚到底是哪一行代码引起的,我逐行注释打包,最后发现是v2f结构体中的这两句:
half4 uv0 : TEXCOORD0;
half4 uv1 : TEXCOORD1;
这个多出来的uv1导致编译的代码多了一部分,其中就包含了phase0_gl_Position。
我单独把这个场景打包为apk文件,发现在note3上是正常的!也就是说,同样的Shader,在项目中打包apk,运行会报错;单独打包,运行正常!
这个问题我一时无解,所以只好写个备胎,只使用一张材质了事。(有可能需要使用 target 3.0 来指定,我还没尝试)
这里我觉得有必要补充一个小知识点,我反复翻阅了,确定你在书中没有说^-^,在使用FallBack时,主纹理变量应尽量保持与备胎Shader相同的命名,因为如果当前Shader不被支持时,使用Unity自带的Shader作为备胎(相信多数人都是),如果主纹理变量命名不一样,有可能导致纹理丢失,备胎也就失去意义了。
作者你好!我又来麻烦你了,这回又有2个问题。
你还记的Unity Shaders and Effects Cookbook这本书第2章第4节的混合纹理吗?我用片元着色器改写之后,用在项目中,前天出了个新问题。
这个场景在iPhone和三星的Pad上都运行正常,但在小米note3上运行,会报错:
09-05 11:31:18.441 25728-25754/com.seawar.i4 I/Adreno: ERROR: 0:116: 'phase0_gl_Position' : undeclared identifier
ERROR: 0:116: 'x' : field selection requires structure, vector, or matrix on left hand side
ERROR: 0:117: 'y' : field selection requires structure, vector, or matrix on left hand side
ERROR: 0:118: 'z' : field selection requires structure, vector, or matrix on left hand side
ERROR: 0:119: 'w' : field selection requires structure, vector, or matrix on left hand side
ERROR: 5 compilation errors. No code generated.
我查了下,发现Shader被编译后的phase0_gl_Position变量没被定义。为了弄清楚到底是哪一行代码引起的,我逐行注释打包,最后发现是v2f结构体中的这两句:
half4 uv0 : TEXCOORD0;
half4 uv1 : TEXCOORD1;
这个多出来的uv1导致编译的代码多了一部分,其中就包含了phase0_gl_Position。
我单独把这个场景打包为apk文件,发现在note3上是正常的!也就是说,同样的Shader,在项目中打包apk,运行会报错;单独打包,运行正常!
这个问题我一时无解,所以只好写个备胎,只使用一张材质了事。(有可能需要使用 target 3.0 来指定,我还没尝试)
这里我觉得有必要补充一个小知识点,我反复翻阅了,确定你在书中没有说^-^,在使用FallBack时,主纹理变量应尽量保持与备胎Shader相同的命名,因为如果当前Shader不被支持时,使用Unity自带的Shader作为备胎(相信多数人都是),如果主纹理变量命名不一样,有可能导致纹理丢失,备胎也就失去意义了。
第二个问题是,场景的lightmap丢失了。
我的程序员给我的反馈如下(也是网上查的):
unity5在某些设备上,对于这种动态加载的物体,无论你是否设置它的renderer的 lightmapIndex和 lightmapScaleOffset, 它都不会为其shader设置LIGHTMAP_ON这个关键字,如果看一下unity 支持light map的shader的源码,可以发现这个 LIGHTMAP_ON是控制显示烘培图的关键,但是这种情况unity5不会设置,并且你自己手动设置也不行。这里有一个方法,就是修改这个shader,自己加一组关键字,比如叫做DYNAMIC_LIGHTMAP_ON,就算没有定义LIGHTMAP_ON,定义了DYNAMIC_LIGHTMAP_ON也会触发lightmap的贴图,然后在代码里加载完毕动态场景后,设置这个keyword就行了
我仿佛记得你在书中的某个地方提到过烘培的事情,但想不起在哪,也找不到了,但是我还没尝试DYNAMIC_LIGHTMAP_ON是否真的起作用,想请教下作者这里的处理办法。
另:
今天的尝试是用自己写Shader烘培,是没得效果的,具体表现就是一团黑。
一定要烘培才能看得出来,设置为Baked GI,不用Realtime GI
为稳当期间也使用了书上第9章第2节你的源码,同样无法烘培。
如果使用Unity自带的Mobile/Diffuse则无问题。
查阅Mobile/Diffuse的源代码发现其中并无处理lightmap的内容,而是在Mobile/VertexLit中有两段Pass专门处理lightmap,这也好理解,想必是当前Shader不支持,则向上追溯。
但是在自己的Shader,或是在作者的Shader中添加FallBack "Mobile/VertexLit"并无任何作用。
昨天去github上说这个问题,作者没有回复,可能这段时间比较忙吧。
书我只看到第十章开始点点,不知道后面有没有说这个问题。
The text was updated successfully, but these errors were encountered: