Unity3.2的对于iOS的一个重要更新就是终于修复了 ToonShader 在横屏时候outline没有正确工作的情况。原因是之前3.1中 UNITY_MATRIX_P
这个函数所获取的数值是错误的,都为0,因此outline没有沿法线方向变大,造成了错误。这个可能是因为横屏时候的坐标系和竖屏时是一样的,project矩阵悲剧了。3.2添加了一个TransformViewToProjection这个函数,修复了这个bug。
接下来一个是关于ToonShader半透明的问题,我们需要对卡通渲染的角色外做一层勾边,但是为了减少多变形数量,有一部分使用了半透明贴图。这个使用带勾边的toon shader就没办法了。传统的勾边是需要对顶点法向量做处理的,用半透明贴图来表现细节,缺少了顶点信息,因此没办法这么处理。目前想到的解决方案
(1)添加模型细节,不采用半透明的纹理,如果顶点处理能力已经是瓶颈了,那会很悲剧
(2)使用不带勾边的toonshader,在纹理上做勾边处理,只需要稍微改写一下Unity的toon shader,但是做光照计算会有问题。
具体取舍,还是要根据具体情况来选择。明天去把方案2整出来。