【发布时间】: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