Unity 的Shader 入门学习总结

本文介绍了Unity中的Shader基础知识,包括Shader的作用、ShaderLab语言、Shader文件的编写结构。讲解了Properties和SubShader的关键部分,如渲染队列、LOD以及编译指令。还探讨了表面着色器和顶点/片段着色器的区别,并提供了简单的Shader编写示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是Shader

Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染(输出)了。

所以说Shader只是一段规定好输入(颜色,贴图等)和输出(渲染器能够读懂的点和颜色的对应关系)的程序。而Shader开发者要做的就是根据输入,进行计算变换,产生输出而已。

在Unity中 Renderer - Material - Shader 的关系

  • GameObject里有MeshRenderer
  • MeshRenderer里有Material列表
  • 每个Material里有且只有一个Shader
  • Material在编辑器暴露该Shader的可调属性

Shader大体上可以分为两类,简单来说

  • 表面着色器(Surface Shader)
    • 为你做了大部分的工作,只需要简单的技巧即可实现很多不错的效果
  • 顶点着色器(vertex Shader)片段着色器(Fragment Shader)
    • 可以做的事情更多,但是也比较难写。使用片段着色器的主要目的是可以在比较低的层级上进行更复杂(或者针对目标设备更高效)的开发。

2. ShaderLab

目前面向GPU的编程有三种高级图像语言:HLSL语言,GLSL语言,Cg语言。

  • HLSL语言:High Level Shading Language,由Microsoft公司提供,通过Direct3D图形软件库来编写的着色器语言。

  • GLSL语言:OpenGL Shading Language,由OpenGL安委会提供,在OpenGL中进行着色器编程的语言。

  • Cg语言:C for Graphics,由NVIDIA公司和Microsoft公司合作提供,有自己的一套关键字和函数库,独立于三维编程接口,在Direct3D和OpenGL上都可工作。

ShaderLab: Unity 自己又封装了一层CG/HLSL/GLSL的接口,但为了实现跨平台,Unity重点支持Cg着色器语言。


3. Shader文件编写

代码结构:

shader "xxx/xxx"    //材质选择Shader的路径
{
    Properties      //属性,输入
    {
        
    }
    SubShader       //子着色器,一个Shader至少有一个SubShader   
    {
        Pass        //通道
        {
            
        }
    }
}

简单的例子:

Shader "Example/Diffuse Texture" {
    Properties {
      _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader {
      Tags { "RenderType" = "Opaque" }
      LOD 200
      
      CGPROGRAM
      #pragma surface surf Lambert
      struct I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值