Unity Shader unity文档学习笔记(十一):战争迷雾核心算法
核心算法 非常简单 主要就是把一个点的世界坐标转换到贴图的UV坐标
给整个场景一个大的plane 加上写的shader
摄像机位置调成plane的正上方
Shader "Unlit/FogRender"
{Properties{_MainTex ("Texture", 2D) = "white" {}}SubShader{Tags{ "Queue" = "Transparent+151" "IgnoreProjector" = "True" "RenderType" = "Transparent" }Blend SrcAlpha OneMinusSrcAlphaZWrite OffZTest OffCull BackPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma fragmentoption ARB_precision_hint_fastest #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;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{// sample the texturehalf4 col = tex2D(_MainTex, i.uv);return col;}ENDCG}}
}
给plane加上渲染的脚本 随便写的 0.0
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FogSystem : MonoBehaviour {public Material material;private Texture2D mTexture;private float worldToTex;private int textureSize = 50;private int inputSize = 2;private float transScale;private Vector2Int worldPos = new Vector2Int(0,0);// Use this for initializationvoid Start () {transScale = transform.localScale.x * 10;worldToTex = textureSize/transScale;UpdateTexture();}// Update is called once per framevoid Update () {if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if (Physics.Raycast(ray, out hit)){// or hit.collider.transform;Vector2 v2 = new Vector2(hit.point.x + transScale / 2, hit.point.z + transScale / 2) * worldToTex;worldPos = new Vector2Int((int)v2.x,(int)v2.y); UpdateTexture();}}}void UpdateTexture(){if (mTexture == null){// Native ARGB format is the fastest as it involves no data conversionmTexture = new Texture2D(textureSize, textureSize, TextureFormat.ARGB32, false);mTexture.wrapMode = TextureWrapMode.Clamp;Color32[] defaultColor = new Color32[textureSize * textureSize];for (int i = 0; i < defaultColor.Length; i++){defaultColor[i] = Color.black;}mTexture.SetPixels32(defaultColor);mTexture.Apply();}else{ Color32[] colors = new Color32[inputSize * inputSize];for (int i = 0; i < colors.Length; i++){colors[i] = Color.white;colors[i].a = 0;}mTexture.SetPixels32(worldPos.x, worldPos.y, inputSize, inputSize, colors);mTexture.Apply();}}private void OnWillRenderObject(){material.SetTexture("_MainTex", mTexture);}
}
有一篇写的比较好的博客
优化了算法 加入了多线程
Unity3D游戏高性能战争迷雾系统实现
mBuffer1 用来计算 是否可见
mBuffer2 用来计算 模糊
最终使用的是mBuffer0 多线程 就是要麻烦一点
边缘模糊使用的是均值模糊均值模糊
Unity Shader unity文档学习笔记(十一):战争迷雾核心算法相关推荐
- 【ember zigbee】序章:协议栈相关文档学习笔记
原文地址:https://blog.csdn.net/tainjau/article/details/90648114 文章目录 写在前面 一.材料出处 二.文档解析 2.1.EZSP Protoco ...
- python定义函数的组成部分有_Python文档学习笔记(4)--定义函数
定义函数 关键字 def 引入函数的定义.其后必须跟有函数名和以括号标明的形式参数列表.组成函数体的语句从下一行开始,且必须缩进. 执行 一个函数会引入一个用于函数的局部变量的新符号表. 因此,在函数 ...
- IAM 策略文档学习笔记
策略文档 IAM 许可策略 附加到确定角色可执行哪些任务的角色.将许可限定为仅角色需要进行的操作,以及仅为进行这些操作角色需要的资源.您可以使用 AWS 管理的或客户创建的 IAM 许可策略 操作:您 ...
- w3schools文档学习笔记 - XML
http://www.w3school.com.cn/xml/xml_syntax.asp 在 XML 中,省略关闭标签是非法的.所有元素都必须有关闭标签 声明不属于XML本身的组成部分.它不是 XM ...
- Vue3 文档学习笔记
vue3学习笔记 setup() 生命周期的与vue2的不同点在:beforeCreated.created都在setup()里进行默认调用,其他的都要写在setup()里面,算做compositio ...
- Unity Shader unity文档学习笔记(十七):径向模糊 实现类似冲锋时的速度感
实现思路:离中心点越远的像素 模糊效果越明显 UV偏移的量越大 shader // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'Uni ...
- Django1.10文档学习笔记二
创建应用 1 创建project Django-admin startproject mysite 自动创建目录结构: mysite/ #项目容器 Manage.py #命令行工具 mys ...
- Unity功能—— 在VS中快速访问Unity API对应文档
声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改. Unity功能-- 在VS中快速访问Unity API对应文档 文章目录 Unity功能-- ...
- 《Unity Shader入门精要》笔记:初级篇(2)
本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载. 本篇博客会补充一些扩展内容(例如其他博客链接). 本篇博客还会提供一些边读边做的效果截图.文章内所有数学 ...
最新文章
- SpringBoot开启异步方法
- Collections.sort()的使用
- 网页布局(固定与不固定原理)
- 给采购凭证分配合作伙伴方案
- bat kafka启动_windows下搭建Kafka,并通过命令窗口收发消息
- [转]jQuery设计思想
- nginx 重启和配置include的位置
- (36)FPGA原语设计(BUFIO)
- c#养老院老人信息管理系统源码 论文_[源码和文档分享]基于JSP和MYSQL实现的学生信息管理系统...
- Java的Exception解析
- 网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
- SpringBoot+SpringMVC+MybatisPlus框架整合实现分页插件查询
- Zilliqa Scilla入门
- Java经典实例:在正则表达式中控制大小写
- 邮件服务器加密方式,盈世Coremail邮件系统四种安全加密方式揭秘
- MyBatis实现中间表关联查询
- ubuntu系统下格式化移动硬盘
- JVM监控及诊断工具命令行篇之jps
- 开机显示:你可能是软件盗版的受害者...解决办法
- 如何用C#制作简易的飞行棋(内有详细步骤,代码和解析,欢迎讨论学习)