找回密码
 立即注册
查看: 532|回复: 1

Programmable blending在Unity下如何处理?只能找到原生 ...

[复制链接]
发表于 2021-12-18 20:47 | 显示全部楼层 |阅读模式
pc平台只能用vulkan的subpass input,不能用gles的那个framebuffer fetch。unity给了个renderpass subpass的封装,subpass input不能边读边写,要实现programable blending只能ping pong
mac上也可以用这套封装实现metal下的读取[[color(n)]] ,限制和pc的vulkan相同
真机上gles和metal可以用unity自带的framebuffer fetch,用CoLoR这个语义作为fs的inout,类似这样:
void Frag(Varyings input, inout float4 gbuffer0 : ColoR0, inout float4 gbuffer1 : ColoR1)
{   
    gbuffer1 = gbuffer0 + gbuffer1;
}

绝大部分mali机型不支持完整的fbfetch,只能读取mrt中的第一张,metal不支持读取硬件深度,需要单独存
这类功能只能说聊胜于无,每个平台需要单独写一套代码,工程量非常大
发表于 2021-12-18 20:52 | 显示全部楼层
pc平台只能用vulkan的subpass input,不能用gles的那个framebuffer fetch。unity给了个renderpass subpass的封装,subpass input不能边读边写,要实现programable blending只能ping pong
mac上也可以用这套封装实现metal下的读取[[color(n)]] ,限制和pc的vulkan相同
真机上gles和metal可以用unity自带的framebuffer fetch,用CoLoR这个语义作为fs的inout,类似这样:
void Frag(Varyings input, inout float4 gbuffer0 : ColoR0, inout float4 gbuffer1 : ColoR1)
{   
    gbuffer1 = gbuffer0 + gbuffer1;
}

绝大部分mali机型不支持完整的fbfetch,只能读取mrt中的第一张,metal不支持读取硬件深度,需要单独存
这类功能只能说聊胜于无,每个平台需要单独写一套代码,工程量非常大
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 08:39 , Processed in 0.090537 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表