Unity SurfaceShader 编程起步

本文介绍了Unity中ShaderLab的基础知识,包括SurfaceShader结构、Shader属性定义及其在Cg代码中的使用方法。此外,还提供了SurfaceShader的一个完整示例。

Unity SurfaceShader 编程起步


           在14年年初的时候,曾经给自己定下了今年要实现的三个目标,其中之一就是学会编写自己的Shader,并能够投入到实际的项目应用之中。现在,转眼间日历已经翻到了6月份,而自己关于Shader的学习,还停留在三天打鱼两天晒网的零碎学习状态,自己心里很是着急。平时的工作任务多,挤掉了自己的学习时间是一方面。但更重要的,还是因为自己没有制定一个稳步的计划,来监督自己利用一切可以利用的时间完成学习的内容,相反,自己做的太过随意了。所以,继续以博文的形式来督促自己的学习,把关于shader学习的点滴都记录下来,并制定自己的学习进度计划,在规定的时间节点,必须完成计划的内容。迈出这一步,算是一个开始——Unity ShaderLab基础学习记录。

 

        Unity 使用自定义的ShaderLab来组织Shader的内容,并针对不同的平台进行编译。在Unity自定义的ShaderLab中,通过SurfaceShader结构封装了能处理不同的照明及阴影,同时还能在Unity的两个渲染路径(Forward和Deferred)下正常工作的极具复杂性的Shader。SurfaceShader的基本结构如下所示:

 

Shader"Custom/NewShader" {

 

         Properties {

                  // 一些属性,Shader的数据接口

         }

 

         SubShader {

                  // SubShader包装了一个渲染方案,这是我们编写Shader时的主阵地

         }

 

         SubShader {

                  // SubShader可有多个,这是为了能够让我们编写的Shader适应不同的显卡

         }

        

         FallBack "Diffuse"

}

 

我们在Properties块中能够定义的全部属性,如下所示:

 

Properties {

                  _Texture ("Texture",2D) = "white" {}             // 图片(纹理)形式的属性

                  _Color ("Color",Color) = (1, 1, 1, 1)               // 颜色属性

                  _Cube ("3D Map",Cube) = "white" {}             //3D纹理,需要6张图片

                  _Vector ("Vector4",Vector) = (1, 1, 1, 1)       // 4个元素的向量

                  _Float ("Float",float) = 1.0                             //浮点数

                  _Range ("Range", range(-10,10)) = 1.0       // 限定范围的浮点数

}

 

        在Unity的ShaderLab所提供的结构中,Shader的逻辑代码部分,都位于SubShader中的GLSLPROGRAM—ENDGLSL部分(GLSL语言),或者是CGPROGRAM—ENDCG部分(Cg/HLSL语言),我们可以选择不同的着色器语言来进行编写。

 

        以上在Properties块中定义的属性,必须在逻辑代码块中(即GLSLPROGRAM—ENDGLSL或CGPROGRAM—ENDCG部分)再声明一次才能使用。它们在Cg代码中的声明方式如下:

 

                  CGPROGRAM

                 

                  sampler2D _Texture;

                  float4 _Color;

                  samplerCUBE _Cube;

                  float4 _Vector;

                  float _Float;

                  float _Range;

                  … …          

                  ENDCG

 

        要格外注意的一点是,在Cg代码块中声明的变量名称必须与Properties块中变量的名称保持一致,否则会提示错误。

综上所述,一个SurfaceShader的完整代码为:

 

Shader"Custom/NewShader" {

         Properties {

                  _MainTex("Texture",2D) = "white" {}             // 图片(纹理)形式的属性

         }

         SubShader {

 

                  Tags {"RenderType"="Opaque" }

                  LOD 200

                 

                  CGPROGRAM

                  #pragma surface surf Lambert

 

                  sampler2D _MainTex;

                 

                  struct Input {

                          float2 uv_MainTex;

                  };

 

                  void surf (Input IN, inoutSurfaceOutput o) {

 

                          half4 c = tex2D(_MainTex, IN.uv_MainTex);

                          o.Albedo = c.rgb;

                          o.Alpha = c.a;

                  }

                  ENDCG

         }

         FallBack "Diffuse"

}

 

        这也是在Unity中创建Shader的默认模板。关于这个默认的Shader模板中的一些内容,我在下一篇记录中会再进行分析,第一篇就到这里了: )

【语音分离】基于平均谐波结构建模的无监督单声道音乐声源分离(Matlab代码实现)内容概要:本文介绍了基于平均谐波结构建模的无监督单声道音乐声源分离方法,并提供了相应的Matlab代码实现。该方法通过对音乐信号中的谐波结构进行建模,利用音源间的频率特征差异,实现对混合音频中不同乐器或人声成分的有效分离。整个过程无需标注数据,属于无监督学习范畴,适用于单通道录音场景下的语音与音乐分离任务。文中强调了算法的可复现性,并附带完整的仿真资源链接,便于读者学习与验证。; 适合人群:具备一定信号处理基础和Matlab编程能力的高校学生、科研人员及从事音频处理、语音识别等相关领域的工程师;尤其适合希望深入理解声源分离原理并进行算法仿真实践的研究者。; 使用场景及目标:①用于音乐音频中人声与伴奏的分离,或不同乐器之间的分离;②支持无监督条件下的语音处理研究,推动盲源分离技术的发展;③作为学术论文复现、课程项目开发或科研原型验证的技术参考。; 阅读建议:建议读者结合提供的Matlab代码与网盘资料同步运行调试,重点关注谐波建模与频谱分解的实现细节,同时可扩展学习盲源分离中的其他方法如独立成分分析(ICA)或非负矩阵分解(NMF),以加深对音频信号分离机制的理解。
内容概要:本文系统介绍了新能源汽车领域智能底盘技术的发展背景、演进历程、核心技术架构及创新形态。文章指出智能底盘作为智能汽车的核心执行层,通过线控化(X-By-Wire)和域控化实现驱动、制动、转向、悬架的精准主动控制,支撑高阶智能驾驶落地。技术发展历经机械、机电混合到智能三个阶段,当前以线控转向、线控制动、域控制器等为核心,并辅以传感器、车规级芯片、功能安全等配套技术。文中还重点探讨了“智能滑板底盘”这一创新形态,强调其高度集成化、模块化优势及其在成本、灵活性、空间利用等方面的潜力。最后通过“2025智能底盘先锋计划”的实车测试案例,展示了智能底盘在真实场景中的安全与性能表现,推动技术从研发走向市场验证。; 适合人群:汽车电子工程师、智能汽车研发人员、新能源汽车领域技术人员及对智能底盘技术感兴趣的从业者;具备一定汽车工程或控制系统基础知识的专业人士。; 使用场景及目标:①深入了解智能底盘的技术演进路径与系统架构;②掌握线控技术、域控制器、滑板底盘等关键技术原理与应用场景;③为智能汽车底盘研发、系统集成与技术创新提供理论支持与实践参考。; 阅读建议:建议结合实际车型和技术标准进行延伸学习,关注政策导向与行业测试动态,注重理论与实车验证相结合,全面理解智能底盘从技术构想到商业化落地的全过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值