Unity-shader学习笔记(三)

这篇博客深入探讨Unity Shader的学习,重点讲解顶点/片元着色器的基本结构、数据传递,以及ShaderLab、DirectX (DX) 和OpenGL的差异。内容涵盖Pass语义块、Properties的使用、顶点着色器如何传入数据,以及Shader在不同平台的坐标、语法、语义和变量类型选择的差异。
摘要由CSDN通过智能技术生成

Unity-shader学习笔记(三)

前面介绍了渲染流水线,那么这里就详细说说每一部分的编写。

9 顶点/片元着色器

9.1 基本结构

Shader "MyShaderName" {
    Properties{
        //属性
    }
    
    SubShader{
        //针对显卡A的SubShader
        Pass{
            //设置渲染状态和标签
            ......;
            //开始CG代码片段
            CGPROGRAM
            //该代码片段的编译指令,例如:
            #pragma vertex vert
            #pragma fragment frag
            //上面这两句一般是shader已经自建好了的
            //CG代码的编写处
            ......;
            ENDCG
            
            //其他设置
        }
        //其他需要的Pass
    }
    SubShader{
        //针对显卡B的SubShader
    }
    
    //上述SubShader都失败后用于回调的Unity Shader 
    Fallback "VertexLit"
}

根据上述内容,就应该发现,最重要的就是Pass语义块。接下来逐个解读每一部分:

代码第一行的命名:这个命名非常重要,并不是单单说就直接命名,而是要以"a/b/…/z"的路径形式命名。命好名后,在Material的shader中可以进行选择:a是一级目录,z是最后的目录,也是最重要决定使用的shader。这样命名可以帮助我们更快速的shader。

Properties属性:这里定义的属性是会直接显示在Material的面板上,例如:

Properties
	{
		_MainTex ("Texture", 2D) = "white" {}
	}

上面这个例子就会在Material面板中增加一项名为"Texture"的属性,它有三个部分:Offset(指明使用贴图的起始位置)、Tilling(指明从offset位置处的大小区域,区域的取值范围一般为(-1,1),超过的话部分会按比例生成新的区域拼接上原先的)、未使用贴图时的Material颜色(由"="后面的颜色决定,这里是白色)

(Offset和Tilling较多得用于制作帧序列动画)

③SubShader:shader在执行过程中回一次检测SubShader,直到找到一个可执行的。

在Pass之前其实还有一个Tags:

Tags{"TagName1" = "Value1""TagName2"="Value2"}

这些Tags会被应用于当前的所有Pass,一共有如下几种Tag:

Queue 设置渲染队列顺序
RenderType 区别渲染对象
DisableBatching 是否要保存模型空间的信息
ForceNoShadowCasting 用于渲染半透明物体时是否接受其他物体的阴影
IgnoreProjector 是否接受贴图投影的影响(非光照照成)
CanUseSpriteAtlas 是否启用图集
PreviewType 指明材质面板将如何预览该材质(默认为球形)

主要介绍其中的Queue、RenderType和PreviewType:

Queue:(实际上Queue的每个option在内部都被解释为固定的数值索引,从上到下以此为:1000,2000,2450,3000,4000;其次天空盒在所有不透明和透明对象之间绘制。)

Background 最先被调用的渲染,通常用来渲染背景
Geometry 默认值,大多数物体使用此队列,用来渲染不透明物体</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值