各位老铁们好,相信很多人对Unity着色器基础教程—新手必看知识点梳理都不是特别的了解,因此呢,今天就来为大家分享下关于Unity着色器基础教程—新手必看知识点梳理以及的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
Shader,也叫着色器,是GPU渲染管线的一部分,但是这部分是可编程的,即可以通过编程来控制。
unity中写的shader和传统的shader还是有些区别的,因为unity相当于一层封装。我们需要按照unity给出的语法结构来编写shader。如果直接像OpenGL或者Direct3D那样写是不行的。
当然,这只是unity Shader的一个总结。 OpenGL和Direct3D可以自行百度。
OK,对于unity Shader来说,更准确的说是unityshaderlab,它有两个常用的结构体:
Surface Shader又称为表面着色器,是Unity提出的概念,它简化了着色器的编写难度,提供了大量内置变量、宏、方法等。Unity推荐使用表面着色器进行编写和光照相关着色器。顶点片段着色器又称为顶点和片段sahder,在OpenGL和Direct3D中都有类似的着色器,基本没有区别。顶点片段着色器比表面着色器更自由、更强大。当然,对于光照,顶点片段着色器需要自己处理。有些朋友可能听说过固定渲染管线着色器。这是一个已被弃用的着色器,但在一些旧显卡上仍然存在这样的着色器。这里我就不做过多的介绍了。
那么,我们来看看shader的语法结构:
Paste_Image.png 整个shader大致可以分为两部分:
用于定义属性的属性块显示在检查器面板上。 SubShader,子着色器,一个着色器可以有多个子着色器。当然,重要的是子着色器中的内容Pass块。一个子着色器可以包含多个Pass块,Pass块就是着色器代码。当有多个Pass块时,除了根据平台、硬件等因素自动识别第一个可执行的Pass块外,还可以通过代码控制来执行特定的Pass块。好的,这是Shader的语法:
着色器“名称”{
特性{
.
}
子着色器{
标签{.}
[共同状态]
经过{
//也可以有标签{}
CG程序
.
ENCG
}
//后备“名称”
}
}一般的语法结构是这样的。
解释:
属性定义:属性,定义着色器的输入。这些输入可以有默认值,并且可以在Inspector 面板上修改和调试,或者通过代码修改。子着色器:一个着色器可以有多个子着色器。这些子着色器不会互相干扰,并且只有一个会运行。编写多个子着色器的目的是为了解决平台兼容性问题。 Unity会选择与终端平台兼容的。着色器运行。 Pass:Pass就是一次绘制,可以看成是一次DC(DrawCall)。对于表面着色器来说,只有一个Pass,但是顶点片段着色器可以有多个Pass,多个Pass可以实现一些特殊效果。
我们可以在一个着色器中使用另一个着色器的某个Pass 块。 Pass 块可以被命名,并且可以使用use "passname" 来调用。具体方法是。 CG代码:写在CGPROGRAM和ENDCG之间。 Fallback:回滚,相当于备胎。关于着色器输入:
属性定义变量:属性定义中的变量是设置Shader参数的主要方式。它随材料而变化。使用此Shader的每种材质都可以在Inspector或脚本中设置这些参数。这些参数除了在Shader的Properties部分定义外,还需要在Cg中声明后才能使用。
全局变量:Shader有一组SetGlobalXXX方法,可以设置Shader的统一变量,这些变量在Cg中定义,但在属性中不定义。此设置是全局的,所有定义此统一的着色器都会受到影响。例如,如果我们希望场景随着时间的推移而改变颜色,我们可以为场景中使用的Shader设置一个统一的全局颜色变量,然后通过在脚本中设置颜色来改变场景的颜色。当角色释放技能时场景变黑时也可以使用此方法。
至于shader中可以定义的属性如下:
Paste_Image.png 下面是关于SubShader的一些知识点:
标签:标签用于修改子着色器。硬件将使用标签来确定何时调用着色器。
比较常见的标签有: Queue 渲染队列
从名称中可以看出,这决定了渲染顺序。它定义了一个整数,决定了着色器的渲染顺序。数字越小,渲染越早。这意味着越早渲染,就越晚渲染。物体被覆盖。
unity中预定义的渲染队列有:Paste_Image.pngRenderType
渲染模式,其实主要是用来处理相机特效的。 ShaderPplacement 将使用渲染模式。通常,我们在渲染透明对象时会使用"RenderType"="Transparent",在渲染不透明对象时会使用"RenderType"="Opaque"。
关于本次Unity着色器基础教程—新手必看知识点梳理和的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。
【Unity着色器基础教程—新手必看知识点梳理】相关文章:
用户评论
想要学习Unity游戏开发这部分 shader 真的是太有必要了!
有7位网友表示赞同!
这个分享也太棒了!刚好想开始学 shader,直接从入门知识点入手真是最佳选择!
有5位网友表示赞同!
期待后续的教程,想跟着做一遍实践操作!
有7位网友表示赞同!
Unity 上用 Shader 做效果真厉害,能把游戏画面变得更加逼真。
有12位网友表示赞同!
以前都不知道 shader 的作用这么大,现在开始学习肯定会有所进步!
有19位网友表示赞同!
分享这篇文章的人太给力了,整理这些入门知识点真心实惠!
有7位网友表示赞同!
终于有人分享 Unity Shader 学习的要点啦! 之前一直没找到合适的资料!
有6位网友表示赞同!
这个标题让我感觉很专业,应该是能学到很多实用的知识!
有12位网友表示赞同!
学习 shader 是不是要先打好编程的基础?
有20位网友表示赞同!
shader 的应用范围真广啊!不仅仅限于游戏开发吗?
有16位网友表示赞同!
我准备做一个3D 游戏,Shader 可以帮助我做哪些具体的效果呢?
有15位网友表示赞同!
想问问学完 shader 之后我能制作什么样的炫酷效果来展示一下嘛?
有5位网友表示赞同!
这个入门知识点总结一,是不是后面还有后续讲解?
有17位网友表示赞同!
shader 这方面的东西看起来有点复杂啊,我需要多练习才能掌握吧!
有12位网友表示赞同!
学习 shader 的话,有哪些好用的软件推荐呢?
有6位网友表示赞同!
最近迷上了游戏开发,学习 shader 是一项必不可少的技能吧!
有17位网友表示赞同!
shader 的代码写起来难吗?是不是很受限于平台?
有14位网友表示赞同!
Unity 越来越强大,shader 这个功能让我很有期待!
有9位网友表示赞同!
这个分享能带来很多启发,让我对 Shader 有了一个初步的认识。
有14位网友表示赞同!
学习 shader 的过程肯定充满挑战,但是看到效果也会很令人满足吧!
有10位网友表示赞同!