游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   随幻Kaller

Unity 简易战争迷雾

个人分类: Shader | 2018-9-13 17:09
标签:战争迷雾
记载一下之前看过的视频中 简易战争迷雾的关键代码
主要流程:两个摄像机 一个显示主画面 一个显示可见区域
利用 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"
}

0 0

评论 (0 个评论)

facelist doodle 涂鸦板

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

个人分类

标签

阅读排行

评论排行

推荐博客

最新博客

关闭

站长推荐 上一条 /1 下一条

返回顶部