Unity中雾效的实现方法二

news2024/12/24 20:38:37

文章目录

  • 前言
  • 一、声明雾效所需要的内置变体
  • 二、在 v2f 中声明顶点传入片段中的雾效插值器
  • 三、 在顶点着色器中计算雾效采样
  • 四、在片元着色器中进行雾效颜色混合
    • 在这里插入图片描述
  • 五、最终效果


前言

Unity中雾效的实现方法二,使用 Unity 自带的方法实现,这次使用的是最通用的雾效方法

常规方案

  • 1.#pragma multi_compile_fog声明雾效所需要的内置变体:FOG_LINEAR FOG_EXP FOG_EXP2.
  • 2.UNITY_FOG_COORDS(idx): 声明顶点传入片断中的雾效插值器(fogCoord).
  • 3.UNITY_TRANSFER_FOG(o,o.vertex): 在顶点着色器中计算雾效采样.
  • 4.UNITY_APPLY_FOG(i.fogCoord, col): 在片断着色器中进行雾效颜色混合.

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

#pragma multi_compile_fog


二、在 v2f 中声明顶点传入片段中的雾效插值器

UNITY_FOG_COORDS(1)

我们来看Unity源码,了解这段代码干了什么?
在这里插入图片描述


三、 在顶点着色器中计算雾效采样

UNITY_TRANSFER_FOG(o,o.vertex);

我们来看Unity源码,了解这段代码干了什么?
在这里插入图片描述
雾效混合因子的计算使用的公式是之前的公式:

  • Unity中Shader雾效的实现方法一

在这里插入图片描述


四、在片元着色器中进行雾效颜色混合

UNITY_APPLY_FOG(i.fogCoord, col);

我们来看 雾效颜色混合 在Unity中的源码:

在这里插入图片描述

五、最终效果

请添加图片描述

最终测试代码:

//unity的雾效
//雾效的实现方法一
Shader "MyShader/P1_9_4"
{
    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 vertex : SV_POSITION;
                
                UNITY_FOG_COORDS(1)
            };
            
            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = 0;
                UNITY_APPLY_FOG(i.fogCoord, col);
                return col;
            }
            ENDCG
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring IOC - BeanDefinition解析

1. BeanDefinition的属性 BeanDefinition作为接口定义了属性的get、set方法。这些属性基本定义在其直接实现类AbstractBeanDefinition中,各属性的含义如下表所示: 类型 名称 含义 常量 SCOPE_DEFAULT 默认作用域:单例模式 AUT…

4.CentOS7安装MySQL5.7

CentOS7安装MySQL5.7 2023-11-13 小柴你能看到嘛 哔哩哔哩视频地址 https://www.bilibili.com/video/BV1jz4y1A7LS/?vd_source9ba3044ce322000939a31117d762b441 一.解压 tar -xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz1.在/usr/local解压 tar -xvf mysql-5.7.44-…

22.构造一个关于员工信息的结构体数组,存储十个员工的信息

结构体问题。构造一个关于员工信息的结构体数组,存储十个员工的信息,包括员工工号,员工工资,员工所得税,员工实发工资。要求工号和工资由键盘输入,并计算出员工所得税(所得税工资*0.2&#xff0…

微服务概览

单体架构 传统的软件应用为单体架构。尽管也是模块化逻辑,但是最终还是会打包并并部署为单体应用。最主要的原因是太复杂。并且应用扩展性低,可靠性也低。敏捷开发和部署变得无法完成。 治理办法:化繁为简,分而治之。 微服务起源…

JavaScript从入门到精通系列第三十六篇:详解JavaScript中的事件监听和事件响应

文章目录 一:什么叫事件 1:概念 2:处理这个事件 (一):鼠标单机按钮 (二):鼠标双机按钮 (三):鼠标移动 3:写法弊端 4:Dom Event 二:监听事件 1:元素事…

SpringCloud微服务:服务拆分

不同的数据库之间,如何共同调用?接下来讲讲两个数据库之间如何交互 1、微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务 2、微服务可以将业务暴露为接口,供其它微服务使用 3、不同微服务都应该有自己独立的数据库…

中断处理机制解析

要处理中断,需要有一个中断处理函数。定义如下: irqreturn_t (*irq_handler_t)(int irq, void * dev_id);/*** enum irqreturn* IRQ_NONE interrupt was not from this device or was not handled* IRQ_HANDLED interrupt was handled by this de…

Netty实现通信框架

一、LengthFieldBasedFrameDecoder的参数解释 1、LengthFieldBasedFrameDecoder的构造方法参数 看下最多参数的构造方法 /*** Creates a new instance.** param byteOrder* the {link ByteOrder} of the length field* param maxFrameLength* the maximum len…

Ubuntu中安装R语言环境并在jupyter kernel里面增加R kernel

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

由浅入深学习统计学 -集中趋势的量度

由浅入深学习统计学 -集中趋势的量度 均值 (通俗来说是平均数) 计算公式 均值在对称数据中才有参考性。 异常数据会导致出现,向左偏移或者向右偏移 中位数 - (也是属于平均数的一种) 当偏移数据和异常数据使得均值产…

Redis集群,你真的学会了吗?

目录 1、为什么引入集群 1.1、先来了解集群是什么 1.2、哨兵模式的缺陷 引入集群解决了什么问题 1.3、使用集群,如何存储数据 2、三种主流的分片方式【经典面试题】 2.1、哈希求余算法 2.1.1、哈希求余算法的介绍 2.1.2、哈希求余算法如何扩容 2.2、一致性…

物联网AI MicroPython学习之语法 bluetooth蓝牙

学物联网,来万物简单IoT物联网!! bluetooth 介绍 该模块为板上的蓝牙控制器提供了相关接口。目前支持低功耗蓝牙 (BLE)的Central(中央), Peripheral(外设), Broadcaster(广播者&…

paypal第三方支付==沙盒,js

学习地址 https://developer.paypal.com/dashboard/ 创建沙盒已经得到商户和用户账号 得到clientid和client secret 得到买家账户和密码 查看沙盒内的所有账号,我这有一个卖家,两个买家账号 DEMO代码 GitHub - paypaldev/PayPal-Standard-Checkout-Tu…

插件式换肤框架原理解析

作者:ak 插件换肤实现原理概述 收集到需要换肤的控件确定控件中需要换肤的属性和资源ID加载插件APK,构造AssetManager并生成插件的Resource类,就可以加载插件包中的资源执行换肤:通过ID加载插件包中的资源,然后再通过…

深度学习_12_softmax_图片识别优化版代码

因为图片识别很多代码都包装在d2l库里了,直接调用就行了 完整代码: import torch from torch import nn from d2l import torch as d2l"获取训练集&获取检测集" batch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(ba…

计算机提示“找不到emp.dll,无法继续执行代码”,这几种解决办法都可以解决

在计算机使用过程中,我们可能会遇到各种问题,其中之一就是系统文件丢失。emp.dll文件是Windows操作系统中的一个重要组件,如果丢失或损坏,可能会导致系统运行不稳定甚至无法正常启动。本文将详细介绍emp.dll文件丢失恢复的4个方法…

基于SpringBoot+Vue的高校心理教育管理系统

基于SpringBootVue的高校心理教育管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 测试列表 测试结果 用户界面 管理员界面 摘要 本文设计并实现了一款…

OpenGL_Learn10(颜色)

1. 颜色 我们在现实生活中看到某一物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的(Reflected)颜色。换句话说,那些不能被物体所吸收(Absorb)的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色。例如,太阳光…

问卷调查表单、表设计

一、DWSurvey实现: 参考文档:快速入门 | 调问开源问卷系统 管理员通过拖拽题型生成表单, 点击保存,预览,发布问卷。用户根据预览的地址,填写问卷提交。管理员可以在我的问卷里看到答卷情况。 关于数据存…