【问题标题】:Shader graph is cutting off the top row of pixels from texture2D着色器图正在从 texture2D 中截断第一行像素
【发布时间】:2021-05-23 13:07:42
【问题描述】:

我有一个用于高光和轮廓的着色器,效果很好,除了一种小但非常烦人的方式:

https://i.stack.imgur.com/vfsNx.png

https://i.stack.imgur.com/N3mG6.png

我的精灵被划分为“玩家”、“头发”、“装备”和“武器”的独立游戏对象,它们都是可交换和动画的。轮廓/填充材质也在它自己的 Gameobject 上,着色器使用“玩家”Sprite Renderer 作为它的 _mainTex 并将 Sprite 设置在它自己的 Sprite Renderer 上。

着色器当前使用“头发”(以及最终的“装备”和“武器”)Sprite Renderer 纹理作为着色器图中名为 _Hair 的辅助纹理,以创建头发和身体的复合高亮/轮廓图像.

效果很好...除了顶线,而且总是恰好顶线的像素被截断。

我知道这不是精灵表或任何导入设置问题,因为其他着色器在各个部分上工作正常,而且我没有使用精灵图集或任何东西。我认为这一定是我设置着色器图的方式有问题......

https://i.stack.imgur.com/5LZHZ.png

...我从“头发”精灵渲染器访问纹理的方式或设置纹理的方式:

public class PlayerOutline : EntityOutline
{ 
public SpriteRenderer outlineRend;

public SpriteRenderer hairRend;

public override void SetSprite()
{
    if (hairRend.sprite)
    {
        outlineRend.material.SetTexture("_Hair",hairRend.sprite.texture);
    }

    base.SetSprite();
}

}

我已经坚持了两天了,所以我非常感谢任何想法,而且我仍然是着色器的初学者;我以前没有将它们用于这样的事情。这也是一个相当困难的标题问题,所以也欢迎任何关于更好标题的建议!

【问题讨论】:

  • 如果你将 1 输入到 Clamp 节点中,而不是输入 Add 的结果,那么顶行精灵是否仍然不是绿色的?
  • 另外,在您显示我们角色轮廓的屏幕截图中,您是如何将轮廓扩展到原始精灵边界之外的?
  • 如果我完全绕过所有内容,直接将二级纹理提供给乘法节点,我会得到以下结果:只有头发突出显示,除了第一行像素。我相当肯定这个问题与大纲本身无关,因为它在单个精灵上运行良好。我这里有两个着色器,一个用于勾画轮廓,一个用于突出显示。我在这里只显示了高光着色器图,因为它们都产生相同的结果,让我认为这是纹理本身的问题。

标签: unity3d shader pixel shader-graph


【解决方案1】:

好的,所以我发现着色器不能应用于主纹理边界之外的辅助纹理。在我的精灵表导入设置上将网格类型从“紧密”更改为“完全矩形”解决了我的问题,尽管我可以预见到需要物理调整精灵大小才能使其工作的情况。感谢 Ben 感兴趣!

【讨论】:

  • 我遇到了类似的问题,因为我的一些精灵在其中一个边缘上没有额外的透明像素。在我的情况下,我通过确保我的精灵在周边都有一些额外的像素来解决它。
猜你喜欢
  • 1970-01-01
  • 2012-09-01
  • 2011-08-26
  • 1970-01-01
  • 2012-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多