kirin77 发表于 2021-12-18 20:47

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

pc平台只能用vulkan的subpass input,不能用gles的那个framebuffer fetch。unity给了个renderpass subpass的封装,subpass input不能边读边写,要实现programable blending只能ping pong
mac上也可以用这套封装实现metal下的读取[] ,限制和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不支持读取硬件深度,需要单独存
这类功能只能说聊胜于无,每个平台需要单独写一套代码,工程量非常大

ChuanXin 发表于 2021-12-18 20:52

pc平台只能用vulkan的subpass input,不能用gles的那个framebuffer fetch。unity给了个renderpass subpass的封装,subpass input不能边读边写,要实现programable blending只能ping pong
mac上也可以用这套封装实现metal下的读取[] ,限制和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不支持读取硬件深度,需要单独存
这类功能只能说聊胜于无,每个平台需要单独写一套代码,工程量非常大
页: [1]
查看完整版本: Programmable blending在Unity下如何处理?只能找到原生 ...