gpt4 book ai didi

unity-game-engine - 剪影轮廓着色器

转载 作者:行者123 更新时间:2023-12-02 20:48:02 26 4
gpt4 key购买 nike

我知道这是一个有据可查的主题,但我仍然有一些问题。我制作了轮廓的轮廓,但将网格加倍。我的帧速率很好,但轮廓太粗糙,我希望它逐渐淡出。结果如下:

enter image description here

它是一个两 channel 着色器,一个用于渲染粉红色的人,另一个用于渲染具有纹理的人。

我正在考虑在轮廓上应用高斯模糊,但没有任何结果...有什么想法吗?提前致谢。

最佳答案

像高斯模糊这样的东西的问题在于,它需要了解之前渲染的相邻像素的颜色......而在着色器中,你没有这个(充其量,你可以对纹理中的相邻像素进行采样) )。大多数实现此效果的游戏会将所有轮廓对象渲染到单独的缓冲区,对其执行一些后处理,然后将其覆盖到屏幕上。

您可以选择的一个稍微有点黑客的选项是根据菲涅尔系数淡出轮廓。基本上,您可以像这样在顶点着色器中获取 View 向量:

float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
float3 viewDir = _WorldSpaceCameraPos.xyz - worldPos;

然后您可以在片段着色器内获得它们之间的点积,如下所示:

half NdotV = saturate(dot(IN.normal, IN.viewDir));

然后你会得到一个从 0 到 1 的值,具体取决于法线面向相机的程度。您可以使用它来掩盖轮廓的 Alpha:

col.a *= sqrt(NdotV); // Square root for more dramatic effect

我还没有尝试过,但值得一试。只需记住设置正确的混合和渲染队列即可。

编辑:您还可以查看此项目:

https://github.com/cakeslice/Outline-Effect

关于unity-game-engine - 剪影轮廓着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com