当前位置: 首页 > news >正文

Unity Shader unity文档学习笔记(十八):unity雾效原理

看很多文章用近平面远平面组成矩阵后转到裁剪空间下通过Z值来解,实际更简单的方式可以直接通过判断距离来实现

FogMgr控制远近面

public class TestFog : MonoBehaviour
{public int startDis = 0;public int endDis = 50;public Vector4 fogParam;public void Awake(){fogParam = new Vector4(startDis, endDis, 0, 0);Shader.SetGlobalVector("DisFog", fogParam);}
}

Test_Fog.cginc 库

#ifndef TEST_FOG
#define TEST_FOGfloat4 DisFog;float MyComputerFog(float3 worldPos)
{float fogFactory = distance(worldPos.xz, _WorldSpaceCameraPos.xz)/(DisFog.y - DisFog.x);return fogFactory;
}#endif

TestFog shader

Shader "Test/TestFog"
{Properties{_MainTex ("Texture", 2D) = "white" {}_FogColor ("FogColor", Color) = (1, 1, 1, 1)}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Test_Fog.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float3 worldPos : TEXCOORD1;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;float4 _FogColor;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;return o;}fixed4 frag (v2f i) : SV_Target{// sample the texturefixed4 col = tex2D(_MainTex, i.uv);fixed4 fogColor = _FogColor * MyComputerFog(i.worldPos);return lerp(col, fogColor, 0.5);}ENDCG}}
}

效果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 算法板子:树形DP、树的DFS——树的重心
  • 除湿机的标准
  • 深入探究CSRF与SSRF漏洞复现:从原理到实践
  • 智能驾驶学习笔记,第一天
  • opencascade AIS_ViewCube源码学习小方块
  • Linux中栈的大小的修改
  • vue3+element-plus实现table表格整列的拖拽
  • 函数对象/仿函数
  • 【机器学习】逻辑回归的梯度下降以及在一变量数据集、两变量数据集下探索优化的梯度下降算法
  • 26.9 Django书籍管理练习
  • vue实现简易的全局加载动画效果
  • 2.回文数
  • Python使用内置logging模块打印日志
  • 主动学习实现领域自适应语义分割
  • 某次活动优惠券故障复盘及优化建议
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 2018一半小结一波
  • Facebook AccountKit 接入的坑点
  • flask接收请求并推入栈
  • happypack两次报错的问题
  • httpie使用详解
  • Python3爬取英雄联盟英雄皮肤大图
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • ubuntu 下nginx安装 并支持https协议
  • 编写高质量JavaScript代码之并发
  • 从tcpdump抓包看TCP/IP协议
  • 对象引论
  • 翻译:Hystrix - How To Use
  • 讲清楚之javascript作用域
  • 近期前端发展计划
  • 开发基于以太坊智能合约的DApp
  • 理清楚Vue的结构
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何在GitHub上创建个人博客
  • 入门到放弃node系列之Hello Word篇
  • 手写一个CommonJS打包工具(一)
  • 新版博客前端前瞻
  • k8s使用glusterfs实现动态持久化存储
  • NLPIR智能语义技术让大数据挖掘更简单
  • # include “ “ 和 # include < >两者的区别
  • #include
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1) caustics\
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (篇九)MySQL常用内置函数
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (源码分析)springsecurity认证授权
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET多线程执行函数
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @EnableAsync和@Async开始异步任务支持
  • @RestController注解的使用