Unity中Shader雾效的实现方法二

这篇具有很好参考价值的文章主要介绍了Unity中Shader雾效的实现方法二。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

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中Shader雾效的实现方法二,Unity,unity,游戏引擎


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

UNITY_TRANSFER_FOG(o,o.vertex);

我们来看Unity源码,了解这段代码干了什么?
Unity中Shader雾效的实现方法二,Unity,unity,游戏引擎
雾效混合因子的计算使用的公式是之前的公式:

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

Unity中Shader雾效的实现方法二,Unity,unity,游戏引擎


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

UNITY_APPLY_FOG(i.fogCoord, col);

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

Unity中Shader雾效的实现方法二,Unity,unity,游戏引擎

五、最终效果

Unity中Shader雾效的实现方法二,Unity,unity,游戏引擎

最终测试代码:文章来源地址https://www.toymoban.com/news/detail-752517.html

//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
        }
    }
}

到了这里,关于Unity中Shader雾效的实现方法二的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity中URP下实现深度贴花(雾效支持和BRP适配)

    在上一篇文章中,我们实现了贴花的效果。但是,细节效果需要优化。 Unity中URP下实现深度贴花 我们在这篇文章中,来优化一下贴花Shader的细节。 原雾效使用方法是只支持不透明对象的。 但是,我们的贴画是半透明的。所以,需要对其进行调整。 col.rgb = MixFog(col.rgb,i.fogCo

    2024年01月16日
    浏览(46)
  • 【毕业论文】| 基于Unity3D引擎的冒险游戏的设计与实现

    📢博客主页:肩匣与橘 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 肩匣与橘 编写,首发于 CSDN 🙉 📢生活依旧是美好而又温柔的,你也是✨  基于Unity3D引擎的冒险游戏的设计与实现 📢前言 摘要 Abstract 1 绪论 1.1 选题背景 1.2 研究目的及意义 2 开发工具

    2024年02月05日
    浏览(46)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(51)
  • Unity Shader:常用的C#与shader交互的方法

      俗话说久病成医,虽然不是专业技术美术,但代码写久了自然会积累一些常用的shader交互方法。零零散散的,总结如下:   有时候我们需要改变ui的一些属性,从而实现想要的效果。通常UGUI上有如下属性,而我们想要改变,就需要获取到Material这个属性:   这里拿Image来举

    2024年02月14日
    浏览(21)
  • 【游戏开发小技】Unity通过UI全屏图来模糊场景画面(Shader | 模糊 | 滤镜 | Blur)

    一、前言 嗨,大家好,我是新发。 以前我写文章都是很长很长,接下来我会尝试用新的方式来写博客,尽量简短,以实用为主。同时也是作为自己零碎的一些记录,方便查阅。 本文我要说的是在 Unity 中通过 UI 全屏图来模糊场景画面的效果。 二、效果演示 这是没用模糊效果

    2024年02月05日
    浏览(32)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(52)
  • Unity编写Shader内置各种矩阵和方法介绍

    返回目录 大家好,我是阿赵。 这里记录一下Unity编写Shader内置各种矩阵和方法 UNITY_MATRIX_MVP:Current model * view * projection matrix. UNITY_MATRIX_MV:Current model * view matrix. UNITY_MATRIX_V:Current view matrix. UNITY_MATRIX_P:Current projection matrix. UNITY_MATRIX_VP:Current view * projection matrix. 其中: M:model(模型

    2024年02月11日
    浏览(36)
  • Unity中URP下的添加雾效支持

    我们使用之前的棋盘格作为测试Shader来添加雾效。 Unity中 URP 下的棋盘格Shader #pragma multi_compile_fog float fogCoord : TEXCOORD2; o.fogCoord = ComputeFogFactor(o.vertexCS.z); col.rgb = MixFog(col,i.fogCoord);

    2024年04月25日
    浏览(23)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(47)
  • 在unity shader当中定义枚举值(两种方法)

    第一种方法 :使用Enum标识符 在properties当中定义Enum,后面option1为显示面板内容,逗号分隔开的是值类型 注意:值只能是整数 定义之后直接可以在代码段中使用 第二种方法:定义KeywordEnum标识符,并创建变体 properties当中定义如上所述; 之后在cg代码段中定义变体,前面加

    2024年02月16日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包