Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 升级到Unity 5.5后轮廓着色器中断_Unity3d_Fragment Shader - Fatal编程技术网

Unity3d 升级到Unity 5.5后轮廓着色器中断

Unity3d 升级到Unity 5.5后轮廓着色器中断,unity3d,fragment-shader,Unity3d,Fragment Shader,该着色器在iPad Air上的unity 5.4上运行良好,但升级到unity 5.5后,它打破了轮廓,但alpha仍在工作 此对象着色器支持纹理和alpha 此着色器用于轮廓,2次通过,首先在着色器上方绘制,然后绘制轮廓并剔除正面 我通过将api渲染更改为OpenGL ES 3而不是Metal,来修复它,但这当然是暂时的修复。我通过将api渲染更改为OpenGL ES 3而不是Metal,来修复它,但这当然是暂时的修复 o.pos.xy += offset * o.pos.z * _Outli

该着色器在iPad Air上的unity 5.4上运行良好,但升级到unity 5.5后,它打破了轮廓,但alpha仍在工作

此对象着色器支持纹理和alpha

此着色器用于轮廓,2次通过,首先在着色器上方绘制,然后绘制轮廓并剔除正面


我通过将api渲染更改为
OpenGL ES 3
而不是
Metal
,来修复它,但这当然是暂时的修复。

我通过将api渲染更改为
OpenGL ES 3
而不是
Metal
,来修复它,但这当然是暂时的修复

o.pos.xy += offset * o.pos.z * _Outline;
o.pos.z因平台而异

因此,不能使用它来缩放轮廓

o.pos.z的目的是保持轮廓尺寸恒定,而不考虑距离

现在,我们需要的是基于摄影机z轴的缩放值

float eye_depth;
// This depth is based on camera's z axis
COMPUTE_EYEDEPTH(eye_depth);
// Divided by near plane. This is similar triangle math.
float eye_depth_scale = eye_depth/_ProjectionParams.y; 
o.pos.xy += offset * eye_depth_scale * _Outline; 
如果轮廓太远,可能需要钳制眼深以防止缩放轮廓

o.pos.z因平台而异

因此,不能使用它来缩放轮廓

o.pos.z的目的是保持轮廓尺寸恒定,而不考虑距离

现在,我们需要的是基于摄影机z轴的缩放值

float eye_depth;
// This depth is based on camera's z axis
COMPUTE_EYEDEPTH(eye_depth);
// Divided by near plane. This is similar triangle math.
float eye_depth_scale = eye_depth/_ProjectionParams.y; 
o.pos.xy += offset * eye_depth_scale * _Outline; 

如果轮廓太远,您可能需要钳制眼深度以防止缩放轮廓。

不是100%确定,但更改日志提到:
着色器:每渲染目标混合模式。新的着色器语法:“Blend N Src Dst”、“BlendOp N Op”、“ColorMask Mask N”,其中N是渲染目标索引(0..7)。此功能适用于DX11/12、GLCore、Metal、PS4。
这可能会影响着色器。是的,我听说unity 5.5的更改日志,但在查看之后,我不知道它是否会影响上面的着色器。考虑到上面引用的更改提到了blend的语法更改,您似乎多次使用了它,我假设它会。再说一次,我不是shaders中的英雄。我昨天解决了这个问题,但我会再做一次,因为解决真正的问题更好。如果你解决了问题,你应该将其作为答案发布,以便将来也可以帮助其他有同样问题的人。不是100%确定,但是更改日志提到:
着色器:每渲染目标混合模式。新的着色器语法:“Blend N Src Dst”、“BlendOp N Op”、“ColorMask Mask N”,其中N是渲染目标索引(0..7)。此功能适用于DX11/12、GLCore、Metal、PS4。
这可能会影响着色器。是的,我听说unity 5.5的更改日志,但在查看之后,我不知道它是否会影响上面的着色器。考虑到上面引用的更改提到了blend的语法更改,您似乎多次使用了它,我假设它会。再说一次,我在着色器中不是英雄。我昨天修复了这个问题,但我会再检查一遍,因为修复真正的问题更好。如果您修复了它,您应该将它作为一个答案发布,以便将来有相同问题的其他人也可以得到帮助。有关内置着色器变量,请参见此处。有关宏的信息,请下载UnityShader并查看UnityCG.cgin。对于内置着色器变量,请参见此处。有关宏,请下载UnityShader并查看UnityCG.cginc
float eye_depth;
// This depth is based on camera's z axis
COMPUTE_EYEDEPTH(eye_depth);
// Divided by near plane. This is similar triangle math.
float eye_depth_scale = eye_depth/_ProjectionParams.y; 
o.pos.xy += offset * eye_depth_scale * _Outline;