欢迎光临散文网 会员登陆 & 注册

尝试入门Shader

2023-03-09 16:04 作者:王大喵爱编程  | 我要投稿

本文仅为边学边记录的流水账。

想优先验证一下自己的想法的可行性,能不能在Unity中自行绘制一些数据。

大概是要用到Shader,找到《Unity Shader 入门精要》,里面应该会有我想要的东西。

快速刷到3.1章,就可以上手尝试了。

在Unity中我们需要配合使用材质(Material)和Unity Shader才能达到需要的效果。

一个最常见的流程是:

(1)创建一个材质;

(2)创建一个Unity Shader,并把它赋给上一步中创建的材质;

(3)把材质赋给要渲染的对象;

(4)在材质面板中调整Unity Shader的属性,以得到满意的效果。

跟着1234走一遍。

创建shader的时候有4个模版,分别表示:

  • Standard Surface Shader会产生一个包含了标准光照模型的表面着色器模板,

  • Unlit Shader则会产生一个不包含光照(但包含雾效)的基本的顶点/片元着色器,

  • Image Effect Shader则为我们实现各种屏幕后处理效果提供了一个基本模板。

  • Compute Shader会产生一种特殊的Shader文件,这类Shader旨在利用GPU的并行性来进行一些与常规渲染流水线无关的计算。

Unity Shader是Unity为开发者提供的高层级的渲染抽象层。ShaderLab是Unity提供的编写Unity Shader的一种说明性语言。

一个典型的ShaderLab语义块如下

在Unity中,我们可以使用上面3种形式来编写Unity Shader

- 表面着色器写在SubShader里面,是对顶点/片元着色器的抽象,并处理了光照细节。

表面着色器,CGPROGRAM和ENDCG之间的代码是使用CG/HLSL编写的,也就是说,我们需要把CG/HLSL语言嵌套在ShaderLab语言中

- 顶点/片元着色器是写在Pass里面的,更复杂也更灵活


顶点/片元着色器的代码也需要定义在CGPROGRAM和ENDCG之间,也是使用CG/HLSL编写的

可以使用GLSL来写吗?

当然可以。这意味着你可以发布的目标平台就只有Mac OS X、OpenGL ES 2.0或者Linux,而对于PC、Xbox 360这样的仅支持DirectX的平台来说,你就放弃它们了。

你可以怎么写呢?

和CG/HLSL需要嵌套在CGPROGRAM和ENDCG之间类似,GLSL的代码需要嵌套在GLSLPROGRAM和ENDGLSL之间。

尝试入门Shader的评论 (共 条)

分享到微博请遵守国家法律