Unity Texture2D 创建圆角

5

我正在使用Unity制作游戏,遇到了这个问题。用户可以从设备上传个人资料图片到我的后端服务器以个性化他们的账户。这个部分工作得很好,但是...

图片是方形矩形的,我想在游戏中展示圆形或者带有圆角的图片?这可以在Unity中使用C#完成吗,还是不可能实现?

2个回答

5

这相对来说是比较简单的。你需要使用阿尔法遮罩技术,这是一种使用阿尔法混合方法使某些几何图形的选定部分变为透明。

你需要创建一个阿尔法遮罩,这是一张图像,在这张图像中,你希望用户的个人资料图片完全不透明的地方是白色的,而你希望它完全透明 (在角落处,例如) 的地方是黑色的。如果使用8位阿尔法遮罩,你可以使用254个灰度级在黑色和白色之间进行完全的混合,从而使你的角落看起来圆润而美观。

在你选择的二维图形编辑器中创建你的阿尔法遮罩。在Unity着色器中,绑定用户的个人资料图片和你的阿尔法遮罩。创建一个像素着色器,在其中从用户的个人资料图片中取RGB组件和从你的遮罩中取阿尔法值。

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:无光照阿尔法遮罩着色器


1
谢谢,我觉得这就是我要找的,虽然...首先,我以前从未使用过着色器,所以我有点迷失,其次...它需要放在NGUI纹理上?不知道从哪里开始 :-/ - Mansa
为什么是黑色?它不能是白色,图像部分是透明的吗? - Yes Barry

0

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

  • 使用一张中间透明,但四个角落呈圆角而非透明的图片。
  • 将其放在个人简介图片前面(在个人简介图片和相机之间)。
  • 由于上方的图片将隐藏它们,所以这些角落将不可见。

当然,上方图片的颜色需要与场景中的其他元素融合在一起,这是我会尝试的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接