Unity Shader基础 您所在的位置:网站首页 frag文件合并 Unity Shader基础

Unity Shader基础

2023-04-26 15:31| 来源: 网络整理| 查看: 265

本篇介绍的是ShaderLab文件的基础结构

如何在编辑器使用?

需要结合材质和unity shader来达到想要的效果。

unity shader定义了渲染所需的各种代码(顶点着色器和片元着色器),属性(使用哪些纹理)和指令(渲染和标签设置)。

材质允许我们调节这些属性并赋给相应的模型

Unity Shader模版:

标准光照模型: Standard Surface Shader

不包含光照(但包含雾效):Unlit Shader 主要使用其作为练习

实现屏幕后处理效果:Image Effect Shader

Compute Shader利用GPU的并行性来进行一些与常规渲染流水线无关的计算。

如何使用?新建Unlit Shader:

Default Maps:指定默认纹理,当任何材质第一次使用该Unity Shader时,纹理就会自动赋予到相应的属性上

ShaderLab

Unity为开发者提供的高层级的渲染抽象层

使用ShaderLab,通过嵌套在花括号内部的语义(syntax)来描述Unity Shader文件的结构,这些结构包含了许多渲染所需的数据。不仅仅是着色器代码

Unity Shader结构名称

Shader “Custom/Myshader”{}

对应出现在材质面板中的位置是:Shader->Custom->MyShader

属性

通过Properties定义的属性将会出现在材质面板中,可供调节

12345Properties{ Name ("display name", PropertyType) = DefaultValue Name ("display name", PropertyType) = DefaultValue ...}

Name一般以 _XX 形式,方便编写代码调用

display name 是实际面板上显示的名字

PropertyType指定属性类型

SubShader

至少要有一个或多个SubShader语义块,会选择第一个能够在目标平台上运行的SubShader,若都不支持则使用Fallback语义指定的Unity Shader

结构:

1234567SubShader{ [Tags] [RenderSetup] Pass{ } //other Passes}

应尽量使用最小数目的Pass

RederSetup选项:(可以单独写在Pass里进行不同设置)

Tags标签:

键值对,都是字符串类型,包括以下类型:

Pass语义块:

结构:

123456Pass{ [Name] //定义Pass名称 "MyPassName" [Tages] [RenderSetup] //other code}

定义名称后可以通过 UsePass “MyShader/MYPASSNAME”来实现复用,使用其他Unity Shader中的Pass(自动转为大写)。

Pass中的Tages类型:

其他的Pass: UsePass(复用),GrabPass(抓取屏幕存在纹理中用于后续Pass处理)

Fallback

其他的SubShader都无法运行情况下使用

结构:

Fallback “names”

Fallback Off

Unity Shader着色器

着色器代码可以写在SubShader语义块中(表面着色器做法),也可以写在Pass语义块中(顶点、片元着色器和固定函数着色器做法)

《Shaders must die》是Unity的渲染工程师Aras所发表的博客,他认为顶点着色器和片元着色器是一种非常反人类的设计方式,虽然对硬件来说非常友好,但是不便于学习和理解。所以他设计了一种新的着色器结构,将原本的顶点着色器和片元着色器合并为同一个着色器,称之为表面着色器。

相比于顶点和片元着色器,表面着色器为着色器增加了一层新的抽象。相比于之前的顶点和片元着色器,表面着色器更为高级(这里的高级不是好与不好,类似于Python是一门高级语言而汇编是一门低级语言)

表面着色器无需写在pass中,示例如下:

顶点/片元着色器也需要定义在CGPROGRAM和ENDCG直接,需要写在Pass语义块中,示例如下:

Unity Shader是使用ShaderLab语言编写的,但是可以在ShaderLab内部嵌套CG/HLSL代码来编写着色器代码

格式:

123456789Pass { //Pass的标签和状态设置 CGPROGRAM //编译指令,例如: #pragma vertex vert #pragma fragment frag //CG代码 ENDCG //其他的一些设置


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有