Unity Texture2D创建圆角

时间:2015-04-17 13:22:19

标签: c# unity3d texture2d

我正在团结一致,我遇到了这个问题。用户可以将配置文件图像从该设备上传到我的后台服务器以对该帐户进行个性化。这部分工作正常,但......

图片是方形矩形,但我希望将图像显示为圆形,或者在游戏中显示时带圆角?这可以在Unity中用c#完成,还是不可能?

2 个答案:

答案 0 :(得分:3)

相对简单。您需要使用Alpha蒙版,这是一种使用Alpha混合使某些几何体的选定部分透明的方法。

您需要创建一个alpha蒙版。这是一个白色的图像,您希望用户的个人资料图片完全不透明,而黑色图片则希望它完全透明(在您的情况下,在角落周围)。如果你使用8位alpha蒙版,你可以使用黑色和白色之间的254种灰色阴影在不透明和透明之间完全融合,让你的角落看起来很漂亮,圆润。

在您选择的2D图形编辑器中创建alpha蒙版。在Unity着色器中,绑定用户的个人资料图片和alpha蒙版。创建一个像素着色器,在其中,从用户的个人资料图片中获取RGB分量,并从掩码中获取alpha值:

sampler2D userProfilePic;
sampler2D roundedCornersAlphaMask;

struct PS_IN
{
    float4 position : SV_POSITION;
    float2 texCoord : TEXCOORD0;
};

float4 PixelShader(PS_IN input) : SV_Target
{
    fixed4 profilePicSample = tex2D(userProfilePic, input.texCoord);
    fixed4 alphaMaskSample = tex2D(roundedCornersAlphaMask, input.texCoord);

    return fixed4(
        profilePicSample.r,
        profilePicSample.g,
        profilePicSample.b,
        alphaMaskSample.r);
}

这似乎是一篇关于你想要做什么的更详细的文章 - 它也有一个更完整的着色器示例:Unity3D: Unlit Alpha Mask Shader

答案 1 :(得分:0)

这是有史以来最糟糕的黑客建议。

  • 图像中间是透明的,但角落是圆润的,不透明。
  • 将其放在个人资料图像的前面(在个人资料图像和相机之间)
  • 角落将不可见,因为顶部的图片会隐藏它们。

当然,顶部图片的颜色必须与场景中的其他内容融为一体,但这是我会尝试的。