战争迷雾sharder
2015-12-03 20:38
399 查看
首先创建两个摄像机,两个摄像机的所有值都一样,把一个拖成子物体。接着 ,在地形的下方创建一个跟地形差不多长、宽的plane,给他一个材质球,材质球设为黑色。
接着,创建一个WarFog层,将子摄像机的渲染层Culling Mask设置成只渲染WarFog层。将Plane设置成WarFog层。
在角色底下创建一个白色面板,设置为WarFog层。创建一个Render Texture ,将它拖到子摄像机的Target Texture属性上。
将主摄像机的Culling Mask去除WarFog层,加上如下脚本。
创建材质球MaskMat将sharder换成如下sharder
接着,创建一个WarFog层,将子摄像机的渲染层Culling Mask设置成只渲染WarFog层。将Plane设置成WarFog层。
在角色底下创建一个白色面板,设置为WarFog层。创建一个Render Texture ,将它拖到子摄像机的Target Texture属性上。
将主摄像机的Culling Mask去除WarFog层,加上如下脚本。
<pre name="code" class="csharp">using UnityEngine; using System.Collections; 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); } }
创建材质球MaskMat将sharder换成如下sharder
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, 1-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 = mul (UNITY_MATRIX_MVP, 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
- 蒟蒻的入门之线段树
- 《Python程序设计》在亚马逊京东当当互动出版网淘宝全面上架
- Sql Server 表创建以及Ef浅谈
- ASPxGridView的几个使用方法
- ASPxGridview使用总结
- 四维空间的假想
- 物理内存、虚拟内存
- poj1338 Ugly Numbers
- 英语年份的读法
- iOS之UI随笔-UITableView的性能优化
- 表扩张
- [iOS] 使用CIColorCube快速製作濾鏡
- 时间复杂度最小的最短路径算法?由这个想到的
- (python)下载秒拍美拍视频
- javaSE(24)(多线程、网络编程、反射)
- 《Python程序设计基础》在亚马逊当当京东互动出版网淘宝等各大书店上架
- ASPxGridViewExporter帮你实现 Dev ASPxGridView的数据导出(一)
- 别拿浅拷贝不当拷贝
- Failed to install HelloWorld.apk on device 'emulator-5554! 解决方案