Camera + RenderTexture在UI上显示主角模型,Camera的BackgroundType设为SolidColor,Background的Alpha设为0,以此去掉模型背景,RenderTexture上只显示模型,这样是正常的。
但是使用Camera上开启PostProcessing,设置了bloom之后,RenderTexture上模型的背景色又出现了,alpha调整无效,背景一片黑,希望可以分享一下解决方案,或者一对一解决问题
你的核心问题还是模型背景的问题,如何去掉背景是核心问题。是否可以从模型中直接去掉背景而不是靠设置透明背景呢?可以从这方面再考虑下。
具体做法是
1.添加一个跟原来相机一样,但是没有PP。
2.在相机上添加脚本,在OnRenderImage方法时把图像读取到一个单独的RenderTexture里面。
public RenderTexture renderTexture;
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (renderTextureCamera.GetMaskRenderTexture())
{
Graphics.Blit(source, renderTexture);
}
}
3.写一个Shader把两张图混合。返回原来的RT的颜色跟这个RT的Alpha通道。
Shader "Custom/BloomRTMask"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_MaskTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags {"Queue" = "Transparent" "RenderType"="Transparent" }
LOD 100
Blend One OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _MaskTex;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
fixed4 colmask = tex2D(_MaskTex, i.uv);
col.w = colmask.w;
return col;
}
ENDCG
}
}
}
4.做成Material添加到需要展示的RawImage上面去。用脚本把两个相机的RT分别添加到RawImage的texture 跟Material的_MaskTex 上面。
黑色背景就没有了。Unity的坑还是很多,最近一直在研究渲染方面,遇到类似情况还是很花时间的。
这个应该是属性未生效的问题,将此属性的对象设置成静态的对象延长其生命周期试试
打开ProjectSetting/Graphics
1.将Tier Setting中的Use Default勾上,主要是要勾High那一栏的
2.如果你不想勾Use Default 那就把Use HDR去掉
3.如果你也不想去掉Use HDR 那就把HDR mode 改成FP16
做游戏的 感觉好高端啊 希望你们做出来好玩的游戏嘿嘿