creator3.0 camera怎么截图

如果没了render() ,那是不是没有离屏相机的概念了。

如果我有一个渲染400帧动画的需求,是不是要等引擎走400帧才能渲染好。

离屏相机当然有,Camera 设置 targetTexture 就是一个离屏相机。是否离屏和渲染的机制没有关联。相机值决定渲染什么内容到什么目标上,而渲染过程是渲染器管理的,渲染器目前没有开放独立的渲染入口,是以渲染帧来驱动渲染的。在 TS 环境下渲染帧和逻辑帧还是同步的,但是在 3.1 中,我们即将拆分渲染线程和引擎主循环线程。

官方是否会考虑出个类似Unity MonoBehaviour.OnRenderImage的回调方法?不仅方便截图,更方便做后处理

拆!现在的离屏还是要跟着游戏逻辑帧来,不科学。

大佬,有没有办法拿到当前屏幕渲染的纹理?

按照你的思路,测试了在多个摄像机的情况下,采用多个对应的captureCamera,然后其targetTexture用同一个renderTexture。发现,renderTexture被摄像机顺序渲染,但也会顺序清除再覆盖上一次的结果(并不是保留依次渲染的纹理),所以导致多个摄像机场景下截图,完全没有了解决方案。

注意相机的 clearFlag 只有第一个应该 clear color 或者 skybox,其他的都应该是 only depth 或者 none,否则如果标记清除 color 那么你看到的也是正确行为

TestCamera.zip (1.4 MB)
这是测试demo,这里再发一下,为了给其他开发者也可以看到,除了主相机,其他全部设置成为DONT_CLEAR和DEPTH_ONLY都无效

求官方大大,尽快能回复一下,谢谢

好的,我们测试验证下

ok,辛苦

测试例里面测试看是正常的,点击按钮切换 RT 内容到 Sprite 的时候,因为 RT 绘制的尺寸大,绘制了图片内容以及一部分背景内容, Sprite 的 Size Mode 设置的是 TRIMMED,会自动适应为 RT 的尺寸,遮挡了后面的内容。

如果希望 Sprite 的尺寸固定,那需要设置 Size Mode 为 Custom,然后脚本里动态设置 Sprite 尺寸的处理需要删掉。

如果希望 RT 只绘制图片内容,那需要调整 Camera 的位置及可视范围,保证只匹配目标图片内容。

如果希望 RT 保持目前的尺寸,但是不希望有背景颜色,那就调整 Camera 的 ClearFlags 为 SOLID_COLOR,并调整 SOLID_COLOR 的 alpha 值为 0.

1、如果是DONT_CLEAR和DEPTH_ONLY的话,为什么会把背景内容绘制上呢?背景是第一个摄像机(“Camera”)填充的,和其他两个摄像机应该不发生关系的;
2、我这里还另外一个测试方向是,多个摄像机应该都会绘制到RT上的,现在只显示了一个摄像机下的(即时不考虑黑色背景);你给的第三个如果解决方案,也不没有解决多个摄像机的问题啊。
@cary

TestCamera.zip (1.8 MB)
继续上传demo,把多余的东西都去除一下,希望你能get到问题所在,现在是如果分别只开启一个捕捉相机,都可以正常截出对应的内容,但是,如果两个同时开启,就只能截到后面渲染的捕捉内容。其次,clearFlags问题也才暴露出来。

哦,抱歉。以为你说的是遮挡的问题,RT 在目前的版本取消了 ColorAttachment 的序列化和自定义编辑,会默认设置为 CLEAR,所以每次绘制都会固定的更新颜色值进行清空,如果需要多个相机进行绘制,可以在 reset 的时候进行自定义,以你 demo 中的代码为例,将 loadOP 设置为 LOAD。

const colorAttachment = new gfx.ColorAttachment();
colorAttachment.loadOp = gfx.LoadOp.LOAD;
colorAttachment.endLayout = gfx.TextureLayout.SHADER_READONLY_OPTIMAL;
const depthStencilAttachment = new gfx.DepthStencilAttachment();
const passInfo = new gfx.RenderPassInfo([colorAttachment], depthStencilAttachment);
rt.reset({width: size.width, height: size.height, passInfo: passInfo});

引擎层面会考虑下对于离屏的 RT 关联相机的设置进行动态更新,方便用户使用。

真相在此了

这些方法都是要预先放置好摄像机吧,太局限了
怎么能随时随地能截指定结点
2.1可以实现的,封装成一个api,传个区域坐标就可以了,随时截屏贼方便,不知道3.0怎么弄了,焦头烂额啊

对于新手真的相当不友好

3赞

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。