目前使用版本3.8.6进行屏幕后效处理,可以拿到color和depth的信息。
PipelineContext下有colorName 和depthStencilName。
现在想要实现一些边缘检测需要法向贴图,请问这个现在有办法获取吗?
大佬求教!@panda
目前应该是不能直接获取到,只能自定义管线增加法线贴图输出来使用
听起来自己增加pass好像很复杂?我应该从哪里开始入手?我看到之前的版本有 Deferred 渲染,那个gbuffer能拿出来给到后处理吗?
求教增加pass还是使用defferd?
我也在看源码,新管线目前还没有延迟渲染,你可以用crp自己实现
可以试试不要法线贴图的边缘检测
用depth可以做边缘检测,只是少了法向少了个来源
用crp实现增加pass还是只增加deffered.
我对cocos还不熟……
增加一个renderpass 输出法线贴图
可以在渲染场景的时候同时输出color和normal,然后在后处理中使用。流程类似这样:
-
创建RT时创建两个颜色缓冲,并且设置为相机的target。
const rt = new RenderTexture(); const passInfo = new gfx.RenderPassInfo([_colorAttachment, _normalAttachment], _depthStencilAttachment); rt.reset({ passInfo });
-
修改渲染Shader
// FS layout(location = 1) out vec4 fragNormal; vec4 frag () { // normal fragNormal = vec4(v_worldNormal, 1.0); // color return color; }
-
在后处理中使用
具体细节的话还需要考虑一些类似跨平台、流程控制和抗锯齿问题。
哇大佬太强了!直接一套做了!但是找不到代码往哪里赛。
我可以理解成,我直接创建一个RT,然后给相加,然后增加shader以及材质给场景里的东西,然后拿着这张帖图,做渲染以及后处理吗?这是不是相当于实现了defferred render?
这个代码应该是放在哪里?我想做到微信小游戏平台上,因此应该是webgl,抗锯齿可能先不用考虑。流程控制就不太懂,是指整个pipeline吗?
目前尚未支持GBuffers。
如果需要法线,得自己改standard shader,输出normal。
同时还需要修改管线,在ForwardPass中,添加normal的render target。
我们也在设计延迟管线方案,希望用户不需要修改场景,就能做到切换各类管线,并且有一定的自定义能力。
这个问题比较复杂,所以还需要些时间。
这个是放在ts脚本里,相机初始化时更新相机的target为RT,渲染完场景后在后处理阶段绑定normal到后处理材质,后处理完毕后上屏。RT的所有颜色缓冲可以通过 rt.window.framebuffer.colorTextures
获得。
抗锯齿是离屏渲染会丢失Canvas默认的抗锯齿,流程控制是指这个流程可配置,扩展性好什么的。
这里还是Forward着色,在着色的同时维护一个normal GBuffer,相当于一次场景渲染后,RT的颜色附件1提供颜色,颜色附件2提供normal,深度模板附件提供深度。后处理阶段将这3个纹理绑定到后处理材质,后处理完毕后上屏。
也就是设置好rt,然后修改使用到的材质的shader,让他把颜色2作为normal的输出?这样每个shader画的时候,就会相当于得到一个gbuffer?
大佬不知道可否上传git或者分享一下,我“借鉴”一下 谢谢大佬!