[LayaAir3]透明物体渲染到rendertexture后alpha混合效果出错
透明物体渲染到renderTexture之后,通过sprite渲染到游戏里的效果跟直接渲染到游戏里的效果不一致,感觉是sprite的混合模式用了add,会亮很多。
正常渲染方式
///////////////////////////////////////////////////////
rendertexture方式
demo里dir.scene是直接渲染,要运行起来才能看到效果。rendertexture.scene是rendertexture渲染,直接选中scene2d就能看到效果。
正常渲染方式
///////////////////////////////////////////////////////
rendertexture方式
demo里dir.scene是直接渲染,要运行起来才能看到效果。rendertexture.scene是rendertexture渲染,直接选中scene2d就能看到效果。
没有找到相关结果
已邀请:
1 个回复
layabox
赞同来自:
你需要给你那个test3d纹理属性上,把预乘Alpha给勾选上,还要注意勾选 sRGB颜色空间。别忘了点击应用,使得纹理属性设置生效。
即便上这样设置了,只能是和2D的效果相近,不可能做到完全一样。
因为,2D和3D处理纹理透明度(Alpha)的方式不同,导致了渲染效果有差异。
在2D渲染中,通常默认使用“预乘Alpha”。这意味着在将纹理应用到图形之前,纹理的颜色(RGB)已经与其透明度(Alpha)相乘。这样,在混合颜色时,计算方式是:混合方式: one(完全不透明的颜色)和one(完全不透明的颜色),这样渲染时,可以更容易地处理颜色和透明度的融合,得到平滑的透明效果。
而在3D渲染中,透明度是基于Alpha值来决定的,混合方式为:oneAlpha(基于当前像素的透明度)和oneMinAlpha(基于最小透明度),这意味着在渲染3D物体时,透明度是根据Alpha值进行直接处理的。不同的透明度值会影响物体的最终显示效果。
所以,你直接把3D算法的纹理通过RenderTexture设置给sprite,得到的结果就存在问题了。通过给纹理设置预乘Alpha,以及2D的颜色空间,就可以得到直接使用2D的相近效果了。3D要考虑的因素很多,追求和2D完全一致是没必要的,如果你更期待2D的效果,并且2D是可以实现的时候,直接采用2D才是更优的方案。