Unity中Shader雾效的实现方法三

文章目录

  • 前言
  • 一、声明雾效所需要的内置变体
  • 二、在 v2f 中,定义 float4 worldPos :TEXCOORD1
  • 三、在顶点着色器中添加,会自动取o.worldPos.w=裁剪空间下的坐标z值.
    • 在这里插入图片描述
  • 四、在片元着色器,添加以下两句话
    • 1、UNITY_EXTRACT_FOG_FROM_WORLD_POS(i);
    • 2、UNITY_APPLY_FOG(_unity_fogCoord, c);
  • 五、最终效果
    • 最终测试代码


前言

Unity中Shader雾效的实现方法三

当在v2f中有定义worldPos时,可以把worldPos.w利用起来做为雾效值.

  • 1.#pragma multi_compile_fog声明雾效所需要的内置变体:FOG_LINEAR FOG_EXP FOG_EXP2.

  • 2.float4 worldPos : TEXCOORD1;:确保使用的Pass中的v2f中使用了worldPos,若该Pass没使用,则推荐雾效实现的方法一,或者定义一个

  • Unity中雾效的实现方法二

  • 3.UNITY_TRANSFER_FOG_COMBINED_WITH_WORLD_POS(o,o.positionCS): 在顶点着色器中添加,会自动取o.worldPos.z=裁剪空间下的坐标z值.

  • 4.UNITY_EXTRACT_FOG_FROM_WORLD_POS(i): 在片断着色器中添加.

  • 5.UNITY_APPLY_FOG(_unity_fogCoord, c): 在片断着色器中进行雾效颜色混合.


一、声明雾效所需要的内置变体

#pragma multi_compile_fog


二、在 v2f 中,定义 float4 worldPos :TEXCOORD1

float4 worldPos : TEXCOORD1;


三、在顶点着色器中添加,会自动取o.worldPos.w=裁剪空间下的坐标z值.

UNITY_TRANSFER_FOG_COMBINED_WITH_WORLD_POS(o,o.pos);

在这里插入图片描述

四、在片元着色器,添加以下两句话

1、UNITY_EXTRACT_FOG_FROM_WORLD_POS(i);

在这里插入图片描述
这句话主要是把 i.worldPos.w 存到了我们新定义的一个 float 变量中
所以,其实可以不写。在传入下一句话的时候
把传入 _unity_fogCoord 修改为 i.worldPos.w

2、UNITY_APPLY_FOG(_unity_fogCoord, c);

这就是内置方法一中用到的雾效颜色混和函数,在源码中最终使用了雾效颜色混合公式

在这里插入图片描述


五、最终效果

在这里插入图片描述

最终测试代码

//unity的雾效
//雾效的实现方法三
Shader "MyShader/P1_9_5"
{
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_fog
            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                //内置方法一
                //相当于雾效开启时定义一个float类型的变量 fogCoord
                //UNITY_FOG_COORDS(1)

                //内置方法二
                //需要使用 顶点的世界坐标
                float4 worldPos : TEXCOORD0;
            };
            
            v2f vert (appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                //内置方法一
                //计算雾效混合因子
                //UNITY_TRANSFER_FOG(o,o.vertex);

                //内置方法二
                o.worldPos.xyz = mul(unity_ObjectToWorld,v.vertex).xyz;
                UNITY_TRANSFER_FOG_COMBINED_WITH_WORLD_POS(o,o.worldPos);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 c = 0;
                //内置方法一
                //计算雾效颜色混合
                //UNITY_APPLY_FOG(i.fogCoord, col);

                //内置方法二
                UNITY_EXTRACT_FOG_FROM_WORLD_POS(i);

                //UNITY_APPLY_FOG(_unity_fogCoord, c);
                UNITY_APPLY_FOG(i.worldPos.w,c);
                return c;
            }
            ENDCG
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/145975.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法笔记-其他高效的技巧与算法(未处理完)

算法笔记-其他高效的技巧与算法 前缀和 前缀和 #include <cstdio> #include <vector> using namespace std; const int MAXN 10000; int n, a[MAXN]; int sum[MAXN] { 0 };int main() {scanf("%d", &n);for (int i 0; i < n; i) {scanf("…

社区牛奶直供站:创新供应链,满足消费者需求

社区牛奶直供站&#xff1a;创新供应链&#xff0c;满足消费者需求 社区牛奶直供站模式彻底改变了传统的多级经销链条和流通加价环节&#xff0c;通过削减中间环节&#xff0c;以相对低价直接供应牛奶给消费者。这样做实现了从奶企源头直接供应到社区家庭的目标&#xff0c;精准…

记录第一次

1.看接口 看控制台 报错吗&#xff1f; 控制台 空指针报错 前端控制台 2.找报错 看哪里报的错误&#xff0c;控制台的错误&#xff08;空指针报错&#xff09; 错误问题&#xff1a; 3.分析业务 业务问题 一定要问&#xff0c; 4. 找到出错点

以阿里云全球故障为例,聊聊如何保障 Auth 服务的 SLA

在刚刚过去的“双十一”购物狂欢季&#xff0c;阿里云经历了一次大规模故障&#xff0c;导致阿里系产品集体中断服务。据报道&#xff0c;11 月 12 日&#xff0c;淘宝、钉钉、闲鱼、阿里云盘等阿里系产品出现无法使用的问题&#xff0c; “阿里全系产品崩了” 的话题迅速引发众…

【仙逆】藤化元嗜杀王林族人,白发暴怒加持,王林觉醒极境杀戮

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 深度爆料&#xff0c;《仙逆》第十话最新剧情解析&#xff0c;藤化元因王林杀死藤厉并夺取其修为而大怒&#xff0c;他发誓要追杀王林到天涯海角&#xff0c;将其千刀万剐。他召集了门人弟子&#xff0c;下达了…

Nacos漏洞复现合集

本文主要复现nacos的一些经典漏洞&#xff0c;既是分享也是为了记录自己的成长&#xff0c;近期会持续更新。 1. QVD-2023-6271 Nacos身份绕过漏洞 1.1 漏洞级别 &#xff1a;高危 1.2 漏洞描述&#xff1a;低版本的Nacos存在默认的scertkey在未更换的情况下可以生成任意的可…

Duplicate keys detected: ‘0‘. This may cause an update error

Duplicate keys detected: ‘0’. This may cause an update error.当遇到该节点内容更新时&#xff0c;会因为重复的key导致无法更新。 该错误&#xff0c;是因为同级节点下存在两个由0开始的key&#xff0c;当遇到该节点内容更新时&#xff0c;会因为重复的key导致无法更新。…

C语言--每日五道选择题--Day12

第一题 1、如下程序的功能是&#xff08; &#xff09; #include <stdio.h> int main() {char ch[80] "123abcdEFG*&";int j;puts(ch);for(j 0; ch[j] ! \0; j){if(ch[j] > A && ch[j] < Z){ch[j] ch[j] e - E;}}puts(ch);return 0; } A…

前端学习笔记--面试题系列总结

event loop它的执行顺序&#xff1a; 一开始整个脚本作为一个宏任务执行执行过程中同步代码直接执行&#xff0c;宏任务进入宏任务队列&#xff0c;微任务进入微任务队列当前宏任务执行完出队&#xff0c;检查微任务列表&#xff0c;有则依次执行&#xff0c;直到全部执行完执…

并发编程产生的根本原因和C#怎么处理并发问题?

并发编程产生的根本原因和C#怎么处理并发问题&#xff1f; 前言 对于现在很多编程语言来说&#xff0c;多线程已经得到了很好的支持&#xff0c; 以至于我们写多线程程序简单&#xff0c;但是一旦遇到并发产生的问题就会各种尝试。 因为不是明白为什么会产生并发问题&#…

ubuntu中使用 vscode 连接docker开发环境

文章目录 ubuntu中使用 vscode 连接docker开发环境步骤一&#xff1a;安装 Remote Development 插件步骤二&#xff1a;连接远程环境步骤三&#xff1a;开发 问题解决参考连接 ubuntu中使用 vscode 连接docker开发环境 Remote Development 是一个 Visual Studio Code 插件&…

炒现货黄金怎么做?挖掘黄金的投资机会

黄金一直以来都是备受投资者追捧的避险资产&#xff0c;其价值和潜力是无法忽视的。而炒现货黄金作为一种快速获取收益的投资方式&#xff0c;备受关注。那么&#xff0c;如何在炒现货黄金中找到投资机会呢&#xff1f;为您详细解析&#xff0c;简单易懂&#xff0c;帮助您开启…

树的概念及结构|树的三种表示方法

前言 以前我们学的线性结构是一对一的线性关系&#xff0c;但现实中&#xff0c;还有一对多的情况要处理&#xff0c;那就是树形结构。今天我们将学习树的概念及结构、和树的三种常见表示方法。 一、树的概念及结构 1、树的概念 树是一种非线性的数据结构&#xff0c;它是由n…

MySQL--主从复制和读写分离

MySQL主从复制和读写分离相关知识 1.什么是读写分离 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 2.为什么要…

设备管理平台能做什么?企业如何做好设备维护管理工作?

在当今高度数字化的时代&#xff0c;企业运营离不开各种设备的支持。如何确保这些设备高效运转&#xff0c;降低故障率&#xff0c;成为了企业运营的关键问题。为此&#xff0c;设备管理平台应运而生&#xff0c;它借助数字化、移动互联网等技术&#xff0c;为企业提供全方位的…

劲升逻辑携手山东电子口岸及青岛港,赋能山东港口数字化建设

合作意向书签署现场 2023 年 11 月 11 日&#xff0c;中国山东——跨境贸易数字化领域的领导者劲升逻辑分别与山东省电子口岸有限公司&#xff08;简称“山东电子口岸”&#xff09;、山东港口青岛港子公司青岛港国际集装箱发展有限公司在新加坡-山东经贸理事会&#xff08;简…

【博士每天一篇文献-算法】Learning without forgetting

阅读时间&#xff1a;2023-10-29 1 介绍 年份&#xff1a;2016 作者&#xff1a;李志忠; 德里克霍伊姆&#xff0c;伊利诺伊大学 期刊&#xff1a;IEEE transactions on pattern analysis and machine intelligence 引用量&#xff1a;3353 提出一种名为"无忘记学习&quo…

在Qt设计师(Qt Designer )控件面板加入自定义控件

目录 1. 问题的提出 2. 本次开发环境说明 3. 具体实现 4. 注意的问题 5. 参考链接 1. 问题的提出 在Qt开发中&#xff0c;经常利用Qt设计师&#xff08;Qt Designer &#xff09;把界面设计好&#xff0c;将界面放到ui文件中&#xff0c;将逻辑处理放到cpp文件中&#xff…

Docker - 网络

Docker - 网络 理解Docker0 # 我们发现这个容器带来网卡&#xff0c;都是一对对的 # evth-pair 就是一对的虚拟设备接口&#xff0c;他们都是成对出现的&#xff0c;一段连着协议&#xff0c;一段彼此相连 # 正因为有了这个特性&#xff0c;evth-pair 充当一个桥梁&#xff0…

图片高清重建

图像超分辨率重建&#xff08;super resolution,SR&#xff09;是指利用计算机将一幅低分辨率图像&#xff08;low resolution,LR&#xff09;或图像序列进行处理&#xff0c;恢复出高分辨率图像&#xff08;high resolution&#xff0c;HR&#xff09;的一种图像处理技术。简单…