【问题标题】:Unity - Render Texture from Camera's targetTexture produces seamsUnity - 从相机的 targetTexture 渲染纹理产生接缝
【发布时间】:2023-03-19 14:19:01
【问题描述】:

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

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

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

注意第二张图片如何在精灵之间有一堆透明的“线条”,而这些线条不应该有。

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

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

Unity 版本:5.2.3f1 - iOS 平台

注意:我这样做的原因是我可以对纹理应用“模糊”图像效果,并使前景中的人群看起来失焦。也欢迎任何有关如何执行此操作的替代建议。

【问题讨论】:

    标签: unity3d camera rendering render-to-texture


    【解决方案1】:

    我不太确定——但听起来你几乎有线路重影。你可能想读一读,让我知道你是否正在处理这个问题:


    这是由于纹理图像的创作方式,以及大多数 3d 引擎在屏幕上以不同尺寸显示纹理时使用的过滤。

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

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

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

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

    为了解决这个问题(在 Photoshop 中),我总是使用 Flaming Pear 免费插件包中的免费“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

    【讨论】:

    • 我会调查的。希望事情就这么简单。
    • 这确实困扰着我正在从事的另一个项目。我将我的精灵从 3DS Max 渲染为 PNG,它们有令人讨厌的重影。我最终不得不将 PNG 渲染为金字塔形,然后光环/幽灵消失了。但是,此解决方案也应该可以工作。
    【解决方案2】:

    原来我用于场景的着色器出于某种原因使用了“Blend SrcAlpha OneMinusSrcAlpha”,而它本应使用“Blend One OneMinusSrcAlpha”。这会导致 alpha 小于 1 的对象使其下方的对象变为半透明,同时暴露出相机清晰的彩色背景。

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多