找回密码
 注册帐号

扫一扫,访问微社区

随幻Kaller

Unity 简易战争迷雾

热度 4708 2018-9-13 17:09 |个人分类:Shader| 战争迷雾

记载一下之前看过的视频中 简易战争迷雾的关键代码
主要流程:两个摄像机 一个显示主画面 一个显示可见区域
利用 RenderTexture 可进行对可见区域的渲染
主摄像机挂 WarFog 脚本 
然后 MaskMat 材质换成下面的 Shader 

[code]csharpcode:

using UnityEngine;
public class WarFog : MonoBehaviour
{

    [SerializeField]
    //拖到子摄像机上的Render Texture  
    private RenderTexture mask;

    [SerializeField]
    //创建的材质球   需要用到WarFog sharder  在下面给出  
    private Material mat;
    //在图像渲染之后执行  
    public void OnRenderImage(RenderTexture source, RenderTexture des)
    {
        //将遮罩的mask传入材质球  
        mat.SetTexture("_MaskTex", mask);
        //经过材质球的sharder变换后  拷贝源纹理到目的渲染纹理。  
        Graphics.Blit(source, des, mat);
    }
}
shader:

[code]csharpcode:

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/WarFog" {
	Properties{
		_MainTex("_MainTex", 2D) = "white" {}
	//遮罩纹理     
	_MaskTex("_MaskTex", 2D) = "white" {}
	}
		SubShader{
		Pass{
		CGPROGRAM
		//顶点处理器  
#pragma vertex m_vert_img    
		//片段处理器  
#pragma fragment frag    

#include "UnityCG.cginc"    

		uniform sampler2D _MainTex;
	uniform sampler2D _MaskTex;

	struct m_appdata_img {
		float4 vertex : POSITION;
		half2 texcoord : TEXCOORD0;
		half2 texcoord1 : TEXCOORD1;
	};
	struct m_v2f_img {
		float4 pos : SV_POSITION;
		half2 uv : TEXCOORD0;
		half2 uv1 : TEXCOORD1;
	};
	//像素处理器  
	fixed4 frag(m_v2f_img i) : COLOR
	{
		//主纹理  
		fixed4 renderTex = tex2D(_MainTex, i.uv);
	//遮罩纹理  
	fixed4 renderTex1 = tex2D(_MaskTex, i.uv1);
	fixed4 finalColor;
	//如果遮罩的红色通道小于0.3  最终颜色就是遮罩图片   否则为主图片  
	if (renderTex1.r < .3) {
		finalColor = renderTex1.rgba;
	}
	else {
		finalColor = renderTex.rgba;
	}

	return finalColor;
	}
		//调整UV值   实现正常偏转  
		float2 m_MultiplyUV(float4x4 mat, float2 inUV) {
		float4 temp = float4 (inUV.x, inUV.y, 0, 0);
		temp = mul(mat, temp);
		return temp.xy;
	}


	m_v2f_img m_vert_img(m_appdata_img v)
	{
		m_v2f_img o;
		o.pos = UnityObjectToClipPos(v.vertex);
		o.uv = MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord);
		o.uv1 = m_MultiplyUV(UNITY_MATRIX_TEXTURE0, v.texcoord1);
		return o;
	}
	ENDCG
	}
	}
		FallBack "Diffuse"
}

发表评论 评论 (5 个评论)

回复 思维跳跃大 2018-9-14 09:02
謝謝大大無私的分享啊~~~
回复 刘自化 2018-11-12 10:21
666666666
回复 刘自化 2018-11-12 10:21
666666666
回复 刘自化 2018-11-12 10:21
666666666
回复 刘自化 2018-11-12 10:21
666666666

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号