自定义渲染管线新增后效异常

  • Creator 版本:3.8.6
  • 目标平台:chrome浏览器
  • 重现方式:必现。
    大家好,我这边尝试自己写渲染管线,跟着文档https://docs.cocos.com/creator/3.8/manual/zh/render-pipeline/write-render-pipeline.html 提取了内置的pipeline代码,并重命名改造。我这试图新增一个crt 扫描线的passbuilder,发现要么黑屏,要么纹理不对(扫描线可以滚动,但是背景图类似默认图片),对着文档的例子和问了好多个AI,搞了好多天,都没有头绪(个人认为是纹理出错了),所以想问问大佬们,我这个是哪里写错了,谢谢了。
    ps:我用postprocess组件是正常的,但是一看官方文档写着已废弃,估计4.0就移除了,心里就想着学点新东西。
    图片:
    相关代码链接pipeline.zip (13.8 KB)
    effect代码:




    我尝试简化shader,只拿输入纹理,还是不行,但是直接把颜色设置别的,例如红色,是可以的

1 重启重启重启,creator 3x编辑器有各种莫名其妙难以明状的bug
2 你的custom pipline crt pass 应该没有问题。
3 我用一个了一个简单shader测试,能正确采样颜色贴图的。
4 只是简单测试屏幕颜色采样,没有使用你的shader , 复制内置shader修改的
5 以下是我的简单测试shader 和 测试截图
// Copyright © 2017-2020 Xiamen Yaji Software Co., Ltd.

CCEffect %{
techniques:

  • passes:
    • vert: vs-crt-line
      frag: fs-crt-line
      pass: crt-scanline
      rasterizerState:
      cullMode: none
      depthStencilState:
      depthTest: false
      depthWrite: false
      }%

CCProgram vs-crt-line %{
precision highp float;
#include <legacy/decode-standard>
#include <post-process/pipeline>

out vec2 v_uv;

void main () {
StandardVertInput In;
CCDecode(In);
FLIP_VULKAN_NDC(In.position);
gl_Position = In.position;

v_uv = a_texCoord;
}

}%

CCProgram fs-crt-line %{
precision highp float;
in vec2 v_uv;

#pragma rate mainTexture pass
uniform sampler2D mainTexture;

layout(location = 0) out vec4 fragColor;
void main () {
vec4 color = texture(mainTexture, v_uv);
float remainder = mod(v_uv.y, 0.02);
if (remainder < 0.005) {
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
} else {
fragColor = color;
}
}
}%

1赞

起的太早了

谢谢大佬起早回复,请问你这个shader也是以自定义passbuilder的方式去体现的吗?我那个效果走postprocess组件的形式(3.8.4之前版本的后效)是正确的

就是用的你的代码,你自己编写了pass builder的那个代码。只是,shader 你没有提供,我就copy 内置的。你的pass 能正确执行。3.8.6 ~ 3.8.8 都正确。思路也是正确的。采样不到屏幕颜色, 多半是你在测试的时候 pass 输出写进那个新 target,context.colorName 输入输出名字搞错了。你可以直接复制内置的一个pass 来修改,100%成功

renderpipeline_custom.zip (29.6 KB) 我也真正准备修改pip。这个是能正确执行的。你看看shader只有简单的 深度/颜色 采样测试。跟你的pass没有什么区别。你正在修改pip。 这个你肯定看得懂

2赞

有点奇怪,我用了你的代码和这个shader,也是可以显示扫描线,但是像是截了第一帧图作为目标纹理(只有左下角信息)。


后面我换了一个工程,用上我自身的effect和大佬的effect,没有任何效果,在2D工程不生效,在3D工程是正常的,但是3D工程添加了canvas,又失效了。
image

【BUG】3.8.5新的默认渲染管线后效2d不生效 原来2D是不支持的,我的天

cocos 就是这么恼火。2D管线上还不支持instancing 。我在尝试3D管线上做2D游戏。我希望自己控制渲染。自己instancing 。并且使用屏幕后期来增强效果。简单的游戏2D/3D性能都还好。市面上这些2D引擎发展起来的3D引擎,都是一个尿性。2D/3D割裂严重。大部分游戏2D根本就跑不满GPU,我省这个鸡毛啊。肯定是想上效果。

387好像有增加draw2d的pass

你这个实非要做,曲线救国->相机渲染到RT上,然后在输出到屏幕。这个流程就非常简单,也不需要搞什么pass

哎,我原来用postprocess组件就实现了的,升级了引擎文档又说已经废弃,所以才想学一学渲染管线,结果,我特么搞了几天了,但凡文档说一下不支持2D…

兜兜转转回到起点

好家伙,我决定放弃升级了,用rt方法了,3D的管线也算入门了,哈哈

现在就用两个方案:1.RenderTexture 2.升级3.8.7,用addDraw2d 。谢谢大佬的解答 :grinning:

现在就用两个方案比较下效果:1.RenderTexture 2.升级3.8.7,用addDraw2d 。谢谢大佬的解答 :grinning:

我现在的一个游戏用了大量后效,387目前比较稳定

请问效果怎么样,我即使只加一个置灰,都有明显的模糊和锯齿。

效果我觉得还行,我不是美术,我觉得效果ok

微信搜索“虫虫灭绝计划”可以玩的看看,迷雾、手电、中毒、寒冰、时停都是用的后效做的。多玩一会就都能触发了