UnityShader初级篇

这篇博客介绍了Unity中两种光照模型的实现:漫射像素级光照(DiffusePixelLevelMat)和半兰伯特光照(HalfLambert)。通过Shader代码展示了如何在片段着色器中计算漫射光和环境光,并应用半兰伯特公式以得到平滑的光照效果。适合作为Unity光照学习的参考资料。

1.Chapter 6

1.1DiffusePixelLevelMat

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'

Shader "ShaderBook/Chapter 6/DiffusePixelLevelMat"
{
    Properties
    {
       _Diffuse("漫反射",Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags {"LightMode"="ForwardBase" }

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "Lighting.cginc"

            fixed4 _Diffuse;

            struct a2v
            {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                fixed3 worldNormal : COLOR;
            };

            v2f vert (a2v v)
            {
                v2f o;
                //将顶点坐标从模型空间转换到裁剪空间
                o.pos = UnityObjectToClipPos(v.vertex);
                //将法线坐标从模型空间转换到世界空间
                o.worldNormal = mul(v.normal,(float3x3)unity_WorldToObject);
                
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                //得到环境光
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

                //得到世界空间下的法线
                fixed3 worldNormal = normalize(i.worldNormal);

                //得到世界空间下的光照方向
                fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);

                //计算漫反射
                fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLightDir));

                fixed3 Color = ambient + diffuse;

                return fixed4(Color,1.0);

            }
            ENDCG
        }
    }
}

1.2HalfLambert

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'

Shader "ShaderBook/Chapter 6/HalfLambert"
{
    Properties
    {
       _Diffuse("漫反射",Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags {"LightMode"="ForwardBase" }

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "Lighting.cginc"

            fixed4 _Diffuse;

            struct a2v
            {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
            };

            struct v2f
            {
                float4 pos : SV_POSITION;
                fixed3 worldNormal : COLOR;
            };

            v2f vert (a2v v)
            {
                v2f o;
                //将顶点坐标从模型空间转换到裁剪空间
                o.pos = UnityObjectToClipPos(v.vertex);
                //将法线坐标从模型空间转换到世界空间
                o.worldNormal = mul(v.normal,(float3x3)unity_WorldToObject);
                
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                //得到环境光
                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

                //得到世界空间下的法线
                fixed3 worldNormal = normalize(i.worldNormal);

                //得到世界空间下的光照方向
                fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);

                //半兰伯特
                fixed3 HalfLambert = dot(worldLightDir,worldNormal)*0.5+0.5;
                //计算漫反射
                fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb *HalfLambert;

                fixed3 Color = ambient + diffuse;

                return fixed4(Color,1.0);

            }
            ENDCG
        }
    }
}

1.2.1 HalfLambert——ShaderForge在这里插入图片描述

OFDM通信系统Python实现源码 本资源包提供了一套完整的正交频分复用通信系统仿真实现,采用Python编程语言开发。该实现涵盖了OFDM系统的主要构成模块,包括: 核心功能模块: - 基带信号生成与QAM调制解调单元 - 串并转换与循环前缀添加机制 - 快速傅里叶变换及其逆变换处理单元 - 多径信道建模与均衡算法实现 - 符号定时与载波同步误差补偿 技术特性: 系统采用离散傅里叶变换实现频域并行传输,通过插入循环前缀有效对抗多径时延扩展。信道编码部分采用卷积码与交织器相结合的设计方案,有效提升系统抗突发错误能力。同步模块包含精确定时同步和频偏估计补偿算法,确保系统在存在载波频率偏移和采样时钟偏差时仍能保持稳定工作。 实现细节: 代码结构采用模块化设计,各功能单元接口清晰明确。信道模型支持AWGN和多径瑞利衰落两种典型无线传输环境。性能评估模块可输出误码率曲线和星座图等关键指标,便于系统性能分析验证。 应用价值: 该实现可作为通信系统教学演示工具,也可为无线通信算法研究人员提供基础开发框架。所有源代码均采用标准Python语法编写,兼容主流科学计算库,具有较好的可移植性和扩展性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值