【发布时间】:2015-02-05 01:29:24
【问题描述】:
我正在尝试使用 RenderTexture 制作假阴影
我动态地创建一个相机,并将一个 RenderTexture 分配给相机作为渲染目标。 RenderTexture 的格式设置为 ARGB32
然后我使用 RenderTexture 作为平面上的纹理,使用自定义着色器将颜色更改为黑色并调整 alpha 值,以便正确显示阴影
下面是我使用的着色器:
Shader "Fake Shadow" {
Properties {
_ShadowTex ("Fake Shadow", 2D) = "white" { TexGen ObjectLinear }
_SAlpha ("Shadow Intensity", float) = 0.35
}
Category {
Tags { "Queue" = "Transparent-1" }
Lighting Off
ZWrite On
Cull Back
Blend SrcAlpha OneMinusSrcAlpha, one one
Subshader {
LOD 200
Pass {
SetTexture[_ShadowTex] {
ConstantColor(0,0,0,[_SAlpha])
matrix [_ProjMatrix]
Combine texture * constant, texture * constant
}
}
}
}
}
当我在 Unity3D 编辑器和 Android 上测试游戏时,一切正常 但是,在ios中结果不正确
结果图片在下面的链接中(抱歉我还不能发布图片)
似乎 ios 在 RenderTexture 中将 alpha 设置为 1,即使是在相机没有捕捉到任何内容的像素上
我找到了解决此问题的方法,即在播放器设置中检查 32 位显示 但我担心检查 32 位显示会影响性能
有没有其他不检查32位显示的解决方案?
【问题讨论】: