首页 文章

Unity - 从相机的targetTexture渲染纹理产生接缝

提问于
浏览
1

我试图使用单独的相机和渲染纹理渲染场景的特定部分 . 该对象位于主摄像机未渲染的单独图层上,但是单独的摄像机是 . 辅助相机的目标纹理设置为我创建的渲染纹理 . 一切都按预期工作,除了这样一个事实,即当渲染到纹理时,对象有一堆直接渲染到屏幕时不存在的接缝 .

直接渲染到屏幕时的样子:Correct

渲染到纹理后显示的内容,然后显示在场景中的四边形上:Incorrect

注意第二个图像在精灵之间有一堆透明的“线”,不应该有任何 .

我使用基本的透明着色器在四边形上显示渲染纹理(因为背景不是渲染纹理的一部分,只是黑色的人群部分) . 我尝试了许多不同的着色器,但它们似乎没有任何区别 .

渲染纹理的设置为:宽度:Screen.width高度:Screen.height格式:RenderTextureFormat.ARGBFloat;

Unity版本:5.2.3f1 - iOS平台

注意:我这样做的原因是我可以对纹理应用“模糊”图像效果,并使前景中的人群看起来没有焦点 . 关于如何做到这一点的任何其他建议也是受欢迎的 .

2 回答

  • 0

    我不太确定 - 但它几乎听起来像你有线重影 . 您可能想要阅读此内容并告诉我您是否正在处理的内容:


    造成这种情况的原因在于如何创作纹理图像,以及大多数3D引擎在屏幕上以不同尺寸显示纹理时使用的过滤 .

    您的图像可能有完全不透明的彩色区域,部分透明的彩色区域和完全透明的区域 . 但是,Alpha通道完全透明(0%不透明度)的区域实际上仍然具有颜色值 . 在PNG中(或者至少,Photoshop导出PNG的方式)似乎默认使用白色作为完全透明的像素 . 对于其他格式或编辑器,这可能是黑色的 . 当在3d引擎中使用时,两者都是同样不合需要的 .

    您可能会想,“如果白色完全透明,为什么白色会成为问题?” . 出现问题的原因是当纹理出现在屏幕上时,通常会根据纹理图像中的像素是大于还是小于实际大小来放大或缩小 . 为了缩小规模,在导入期间会创建一系列缩小版本 . 当纹理以相对于视图的较小尺寸或更陡的角度显示时,使用这些缩小版本,旨在提高视觉质量并使渲染更快 . 此过程称为“mip-mapping” - 在此处阅读有关mip-mapping的更多信息 . 对于放大,通常使用简单的双线性插值 .

    缩放版本通常使用简单的双线性插值创建,这意味着透明像素与相邻的可见像素混合 . 使用mipmap,对于每个较小的级别,与可见像素颜色的不可见混合的问题增加(结果是令人讨厌的白色边缘在更远的距离处变得更明显) .

    解决方案是确保这些完全透明的像素具有与其相邻可见像素匹配的颜色值,以便在插值发生时,来自不可见像素的颜色“渗出”具有适当的颜色 .

    为了解决这个问题(在Photoshop中),我总是使用Flaming Pear Free Plugins包中的免费“Solidify”工具,如下所示:

    下载并安装Flaming Pear“Free Plugins”包(靠近该列表的底部)在photoshop中打开您的PNG . 转到选择 - >加载选择,然后单击确定 . 转到选择 - >保存选择,然后单击确定 . 这将创建一个新的alpha通道 . 现在取消选择全部(Ctrl-D或Cmd-D)选择过滤器 - >火焰梨 - >凝固B现在,您的图像看起来完全由纯色制成,没有透明区域,但您的透明度信息现在存储在显式中Alpha通道,您可以通过在通道选项板中选择它来查看和编辑 .

    现在重新保存你的图像,你会发现你的白色模糊已经消失了!资料来源:http://answers.unity3d.com/questions/10302/messy-alpha-problem-white-around-edges.html

  • 0

    圈因为某些原因,我在使用“Blend SrcAlpha OneMinusSrcAlpha”时使用的着色器正在使用“Blend One OneMinusSrcAlpha” . 这导致alpha小于1的对象使其下的对象变为半透明,以及暴露相机的清晰颜色背景 .

相关问题