服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - unity shader 较完整光照(含有多光源阴影)

unity shader 较完整光照(含有多光源阴影)

2022-12-05 11:25学者(cloudea) C#

这篇文章主要介绍了unity shader 较完整光照(含有多光源阴影),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Unity Shader是着色器,将纹理、网格信息输入,得到材质的一段程序,具体是个什么东西,还需要亲自实践才知道。

效果图:
shader被附给了球。
灯光需要在属性面板开启阴影。

unity shader 较完整光照(含有多光源阴影)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
 
Shader "Unlit/lightFull"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100
 
        Pass
        {
            Tags{"LightMode" = "ForwardBase"}
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fwdbase
            
            #include "UnityCG.cginc"
            #include "Lighting.cginc"
            #include "AutoLight.cginc"
            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
                float3 normal : NORMAL;
            };
 
            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 pos : POSITION;
                float4 pos_world : TEXCOORD1;
                float3 normal:TEXCOORD2;
                SHADOW_COORDS(3)
            };
 
            sampler2D _MainTex;
            float4 _MainTex_ST;
            
            v2f vert (appdata v)
            {
                v2f o;
                o.pos_world = mul(UNITY_MATRIX_M, v.vertex);
                o.normal = v.normal;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                TRANSFER_SHADOW(o);
                return o;
            }
            
            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                float4 lightColor = _LightColor0;
                float3 lightDir = WorldSpaceLightDir(i.pos_world);
                UNITY_LIGHT_ATTENUATION(atten, i, i.pos_world.xyz);
                return col * lightColor * saturate(dot(lightDir, i.normal)) * atten;
            }
            ENDCG
        }
        pass
        {
            Tags{"LightMode" = "ForwardAdd"}
            Blend One One
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_fwdadd_fullshadows
                
            #include "UnityCG.cginc"
            #include "Lighting.cginc"
            #include "AutoLight.cginc"
            struct v2f
            {
                float4 pos : POSITION;
                float4 vertex : TEXCOORD0;
                float3 normal : NORMAL;
                SHADOW_COORDS(2)
            };
 
            v2f vert(appdata_full data)
            {
                v2f v;
                v.pos = UnityObjectToClipPos(data.vertex);
                v.vertex = mul(UNITY_MATRIX_M, data.vertex);
                v.normal = data.normal;
                TRANSFER_SHADOW(v);
                return v;
            }
 
            float4 frag(v2f v) :SV_Target
            {
                float3 lightColor = _LightColor0;
#ifdef USING_DIRECTIONAL_LIGHT
                float3 lightDir = _WorldSpaceLightPos0;
#else
                float3 lightDir = _WorldSpaceLightPos0 - v.vertex;
#endif
                UNITY_LIGHT_ATTENUATION(atten, v, v.vertex.xyz);
                float3 color =  lightColor * saturate(dot(lightDir, v.normal) * atten);
                return float4(color, 1);
            }
            ENDCG
        }
    }
    Fallback "Specular"
}

到此这篇关于unity shader 较完整光照(含有多光源阴影)的文章就介绍到这了,更多相关unity shader光照内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/u013749051/article/details/85986593

延伸 · 阅读

精彩推荐
  • C#Visual Studio 未能加载各种Package包的解决方案

    Visual Studio 未能加载各种Package包的解决方案

    打开Visual Studio 的时候,总提示未能加载相应的Package包,有时候还无法打开项目,各种错误提示,怎么解决呢?下面小编给大家带来了Visual Studio 未能加载...

    jianxuanbing9882021-12-08
  • C#c# 应用NPOI获取Excel中的图片,保存至本地的算法

    c# 应用NPOI获取Excel中的图片,保存至本地的算法

    本文主要介绍了c# 应用NPOI获取Excel中的图片,保存至本地的算法。具有很好的参考价值,下面跟着小编一起来看下吧...

    SweetMemory10622021-12-23
  • C#C#创建dll类库的图文步骤

    C#创建dll类库的图文步骤

    类库让我们的代码可复用,我们只需要在类库中声明变量一次,就能在接下来的过程中无数次地使用,而无需在每次使用前都要声明它。这样一来,就节省...

    C#教程网11802021-12-21
  • C#C#递归算法之快速排序

    C#递归算法之快速排序

    快速排序由C.A.R发明,它依据中心元素的值,利用一系列递归调用将数据表划分成越来越小的子表。在每一步调用中,经过多次的交换,最终为中心元素找...

    Robin11202021-11-25
  • C#C# 实现FTP客户端的小例子

    C# 实现FTP客户端的小例子

    这篇文章主要介绍了C# 如何实现FTP客户端,文中实例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    Alan.hsiang11112022-09-23
  • C#C#将PPT文件转换成PDF文件

    C#将PPT文件转换成PDF文件

    今天小编就为大家分享一篇关于C#将PPT文件转换成PDF文件,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看...

    chenqiangdage11612022-03-08
  • C#C# 使用GDI绘制雷达图的实例

    C# 使用GDI绘制雷达图的实例

    这篇文章主要介绍了C# 使用GDI绘制雷达图,本文通过一段实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    chenmsg7702022-08-10
  • C#C#线程同步的几种方法总结

    C#线程同步的几种方法总结

    在本篇文章里小编给大家整理的是关于C#线程同步的几种方法总结,需要的朋友们可以学习下。...

    森大科技10992022-08-28