首页 > 其他分享 >Unity3d Vertex/Fragment Shader添加Shadow

Unity3d Vertex/Fragment Shader添加Shadow

时间:2023-12-31 11:00:44浏览次数:30  
标签:Unity3d Fragment uv Vertex DiffuseTint v2f float4 Diffuse DiffuseTexture

Shader "ZX/BaseVertFragmentShadow" 
{
    Properties
    {
        _DiffuseTexture ("Diffuse Texture", 2D) = "white" {}
        _DiffuseTint ( "Diffuse Tint", Color) = (1, 1, 1, 1)
    }

    SubShader
    {
        Tags { "RenderType"="Opaque" }

        pass
        {     
            Tags { "LightMode"="ForwardBase"} //第一步//

            CGPROGRAM

            #pragma vertex vertShadow
            #pragma fragment fragShadow
            #pragma multi_compile_fwdbase//第二步//

            #include "UnityCG.cginc"
            #include "AutoLight.cginc" //第三步//

            sampler2D _DiffuseTexture;
            float4 _DiffuseTint;
            float4 _LightColor0; //第四步//

            struct v2f
            {
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD2;
                LIGHTING_COORDS(0, 1) //第五步//
            };

            v2f vertShadow(appdata_base v)
            {
                v2f o;
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
                o.uv = v.texcoord;
                TRANSFER_VERTEX_TO_FRAGMENT(o); //第六步//
                return o;
            }

            float4 fragShadow(v2f i) : COLOR
            {       

                float4 diffuse = tex2D(_DiffuseTexture, i.uv);
                float4 diffuseTerm = _LightColor0 * LIGHT_ATTENUATION(i); //第七步//
                float4 finalColor = diffuseTerm * diffuse * _DiffuseTint;
                return finalColor;

            }

            ENDCG
        }     

    }
    FallBack "Diffuse"
}

参考链接:http://www.jianshu.com/p/74dfaabc0009

标签:Unity3d,Fragment,uv,Vertex,DiffuseTint,v2f,float4,Diffuse,DiffuseTexture
From: https://www.cnblogs.com/open-coder/p/17937304

相关文章

  • 谷歌云 | Dataflow 和 Vertex AI:可扩展高效的模型服务
    【CloudAce云一 是GoogleCloud全球战略合作伙伴,在亚太地区、欧洲、美洲和非洲拥有二十多个办公室。CloudAce在谷歌专业领域认证及专业知识目前排名全球第一位,并连续多次获得GoogleCloud各类奖项。作为谷歌云托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认......
  • 谷歌云 | Dataflow 和 Vertex AI:可扩展高效的模型服务
    如果您考虑使用VertexAI来训练和部署您的模型,那您选对了!数据对于机器学习至关重要,模型拥有的数据量越大,质量越高,模型的性能就会越好。在训练模型之前,数据必须经过预处理,这意味着清洗、转换和聚合数据,使其成为模型可以理解的格式。数据预处理在模型服务时也很重要,但由于实时流数......
  • Unity3D 如何提升游戏运行效率详解
    前言Unity3D是一款非常强大的游戏引擎,但是在处理复杂场景和大量资源时,游戏运行效率可能会遇到一些问题。本文将详细介绍如何提升Unity3D游戏的运行效率,包括技术详解和代码实现。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀使用合适的资源压缩......
  • Unity3D Shader在GPU上是如何执行的详解
    Unity3D是一款广泛应用于游戏开发的跨平台开发引擎,它提供了丰富的功能和工具来帮助开发者创建高质量的游戏。其中一个重要的功能就是Shader,它可以用来控制对象的渲染效果。在Unity3D中,Shader是在GPU上执行的,那么它是如何工作的呢?本文将详细解释Unity3DShader在GPU上的执行过程,并......
  • Unity3D Shader Compute Shader基于GPU的并发计算详解
    在游戏开发中,计算密集型的任务通常需要耗费大量的CPU资源,这可能导致游戏性能下降,影响玩家的游戏体验。为了解决这个问题,Unity3D引入了ShaderComputeShader技术,它使用GPU进行并发计算,将一些计算密集型任务从CPU转移到GPU上执行,以提高游戏的性能和效率。本文将详细介绍Unity3DSha......
  • Unity3D 基类脚本怎么分别获取多个子类脚本的组件详解
    Unity3D是一款非常流行的游戏开发引擎,它提供了丰富的功能和工具,使得开发者可以轻松地创建高质量的游戏。在Unity3D中,脚本是游戏对象的一部分,它们通过附加到游戏对象上的组件来实现特定的功能。本文将详细介绍在Unity3D中如何分别获取多个子类脚本的组件,并提供相应的代码实现。对......
  • Unity3D Shader在GPU上是如何执行的详解
    前言Unity3D是一款广泛应用于游戏开发的跨平台开发引擎,它提供了丰富的功能和工具来帮助开发者创建高质量的游戏。其中一个重要的功能就是Shader,它可以用来控制对象的渲染效果。在Unity3D中,Shader是在GPU上执行的,那么它是如何工作的呢?本文将详细解释Unity3DShader在GPU上的执行过......
  • Unity3D 如何提升游戏运行效率详解
    Unity3D是一款非常强大的游戏引擎,但是在处理复杂场景和大量资源时,游戏运行效率可能会遇到一些问题。本文将详细介绍如何提升Unity3D游戏的运行效率,包括技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术......
  • Unity3D 项目中怎样正确的使用 Lua详解
    在Unity3D游戏开发中,Lua作为一种轻量级的脚本语言,被广泛应用于游戏逻辑的编写和扩展。本文将详细介绍如何正确地在Unity3D项目中使用Lua,并给出相应的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬......
  • Unity3D Asset与Object 资源管理系统详解
    Unity3D是一款流行的游戏开发引擎,它提供了一个强大的资源管理系统,可以帮助开发者有效地管理和使用游戏中的资源。在Unity3D中,资源可以分为Asset和Object两种类型,本文将详细介绍Unity3D的Asset与Object资源管理系统的技术细节和代码实现。对啦!这里有个游戏开发交流小组里面聚集了......