Unity Shader基础

第三章 Unity Shader基础

一对好兄弟:材质和Unity Shader

在Unity中需要配合材质和 Unity Shader 才能达到需要的效果。Unity Shader定义了渲染所需的各种代码(如顶点着色器和片元着色器)、属性和指令,而材质则允许我们调节这些属性,并将其最终赋给相应的模型。为什么会有材质呢?对于美术人员来说,材质是他们十分熟悉的一种事物。Unity的材质和许多建模软件如(Cinema 4D、 Maya等)中提供的材质功能类似,它们都提供了一个面板来调整材质的各个参数。

Unity 中的 Shader

Unity 中的 Shader 文件,统称为Unity shader,是Unity在传统shader上实现的一层抽象,帮开发者屏蔽了很多细节。点击项目窗口中的 Unity shader 文件,能看到导入设置面板,该面板上能看到一些信息:

  • Show generated code按钮,可以让我们查看生成的顶点/片元着色器。
  • Compile and show code 可以展示该Unity shader针对不同的图像编程接口(例如OpenGl、D3D9、D3D11等)最终编译成的Shader代码。
  • 还有一些信息与我们在 Unity Shader 中的标签设置有关。

ShaderLab 语法

ShaderLab 是编写 Unity Shader 的说明性语言,类似于 CgFX 和 Direct3D Effects语言。它们都定义了要显示一个材质所需的所有东西,而不仅仅是着色器代码。Unity会在背后,根据使用的平台,编译成真正的代码和Shader文件。

一个 Unity shader 的基础结构大致如下:

Shader "Shader Name"{
	Properties{
		//属性
        Name("displayName", PropertyType) = Defaultvalue
	}
    SubShader{
        //针对显卡A使用的子着色器
        [Tags]
        [RenderSetup]
        Pass{
            //设置渲染状态和标签
            [name]
            [Tags]
            [RenderSetup]
            
            
            //开始 Cg 代码片段
            CGPROGRAM
            
            ENDCG
            //其他设置
        }
        
        //其他需要的Pass
    }
    SubShader{
        //显卡B使用的子着色器
    }
    Fallback "VertexLit"
}

表面着色器、顶点/片元着色器、固定函数着色器

  • 表面着色器(Surface shader)是Unity自己创造的一种着色器代码类型,可以理解为顶点/片元着色器的更高一层抽象。Unity在这里处理了很多光照细节。Unity在背后仍旧把它转化成对应的顶点/片元着色器。定义在SubShader中的CGPROGRAM和ENDCG之间。
  • 顶点/片元着色器(Vertex/Fragment Shader),写在Pass中的CGPROGRAM和ENDCG之间。
  • 固定函数着色器,是针对不支持可编程管线着色器的设备,已经很少用了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值