Shader之小白入门学习二

Shader之小白入门学习二

前言

据说Shader很难?咱也别管什么鬼图形学,鬼教学,乱七八糟的东西,直接就在Unity中干上我们的Shader,一步一步学习了解并深入征服它!

Shader应该由谁来做

这是个很有趣的话题,Shader到底应该由谁来做呢?通常情况下有此技能的人员有:

  1. 图形程序员
  2. 一小部分程序
  3. 一小小部分美术
  4. 技术美术

一般的项目团队,如果不是自研引擎的话,很少会配置图形程序员,而且图形程序员这么高大上的人做Shader似乎又有种浪费的感觉,所以我们先忽略他。
程序呢,每个团队中总有那么一两个有两把刷子的,但是苦于自身美感的问题,最后在不断与美术沟通交流的过程中放弃自我。
美术呢,难得碰到个会做Shader的,效果也是华丽的,但是真的敢用吗?
这是我们的主角,技术美术登场了,也是我梦想的职位,及程序与美术于一身的美男子。效果华丽的,性能也稳妥的!
所以说如果你是技术美术的话,一定要美术对效果满意,程序对性能放心,在这其中找到效果与性能最佳平衡点,这才是我们制作Shader的优势,而不仅仅是我们能做!

Shader模板

现在让我们开始创建我们的第一个Shader,打开Unity,然后再Project面板点击右键,一次从中选择Create/Shader/…
在这里插入图片描述
然后会发现有几个选项:

  1. Standard Surface Shader
    标准表面着色器,是一种基于物理的着色系统(使用了Physically BasedRendering(简称PBR)技术,即基于物理的渲染技术),以模拟现实真实的方式来模拟材质与灯光之间的关系,可以很轻易的表现出各种金属反光效果,同时此种Shader的书写逻辑也更符合人们的思维模式。
  2. Unlit Shader
    Vertex/Fragment Shader,也就是最基本的顶点片段着色器,不受光照影响的Shader,多用于特效,UI的效果制作。
  3. Image Effect Shader
    也是顶点片段着色器,只不过是针对后期处理而定制的模板,后处理是什么呢?Bloom(也有人叫Glow/泛光/辉光等说法),调色,景深,模糊等,这些基于最终整个屏幕画面而进行再处理的Shader就是后处理。
  4. Compute Shader
    Compute Shader是运行在图形显卡上的一段程序,独立于常规渲染管线之外的,它可以直接将GPU作为并行处理器加以利用,从而使GPU不仅具有3D渲染能力,还具有其他的计算能力。
  5. Shader Variant Collection
    Shader变体收集器,在上面创建的时候,你会发现Shader Variant Collection与以上四个是被割开的,就是因为这个与他们不一样,他不是制作Shader的模板,而只是对Shader变体进行打包用的容器。

注:以上的Standard Surface Shader,Unlit Shader,Image Effect Shader仅仅只是Unity为了方便我们书写而内置得几个模板
,我们完全可以建一个Unlit Shader,然后将其改成Surface Shader,同样也可以将一个Standard Surface Shader改成顶点片段着色器,所以这一点一定要明白,他们只是内容格式不一样的模板而已,我们完全可以自由修改成任意我们想要的一种着色器类型,当然我们也可以通过一些手段来定制出我们自己的模板。

材质与Shader的关系

好的,让我们继续,从Shader子菜单中选择“Unlit Shader”。创建完成后提示让我们输入新的名称,我们选择默认即可。
在这里插入图片描述
由于在Unity中Shader就是运行在图形显卡上的一段包含指令的代码,所以我们需要在创建一个材质来关联它,这样才能把材质赋给场景中的物体来实现我们想要的效果。再创建一个材质(Material或者进经常被叫做材质球),由于材质也是一个资源,所以我们还是在创建Project面板中点击右键,从中选择Create/Material,如下图所示
在这里插入图片描述
然后现在我们有了一个Shader和一个材质球,此时如果选中材质球在Inspector面板中就可以看到他的相关参数,比如这个材质所引用的是哪个Shader,以及具体暴露出来的参数是那些等等。在这里插入图片描述
我们先重点关注下其中的Shader这个参数。
它代表的是当前这个材质球是与哪个Shader绑定关联的,我们可以点击他的下拉列表框从中进行选择,前提是我们知道我们想关联的那个Shader的名字路径是哪个。
现在我们采用拖动的方式进行关联,在Project面板下直接拖动Shader到材质球上,然后你会发现材质球的Inspector面板中的Shader参数就已经被指定为刚才那个Shader了。

小技巧:在创建材质球的时候,如果我们选中某个Shader,然后在它上面点击右键来创建材质的话,那么这个材质会自动与此Shader进行关联,无需再单独制定。

总结

那么最终我们总结下Shader与材质的关系:

  1. 一个Shader可以与无数个材质关联;
  2. 一个材质同一时刻只能关联于一个Shader;(为什么说是同一时刻,因为我们可以通过代码去动态改变材质所关联的Shader)
  3. 材质可以赋予 模型,但是Shader不行;
  4. 才知酒形式Shader的实例,每个材质都可以参数不一样呈现不同的效果,但是当Shader改变时,关联他的所有材质都会相应的改变;
  5. 举个例子:比如游戏中的怪物,我们只需做一个Shader,然后每个怪物给它一个材质求,材质球上赋与不同的贴图与参数来表现不同的怪物。

往后学习建议

可以按照如下的顺序循序渐进的学习

  1. Unlit Shader,这是最基本也是最简单的模板,通过学习他了解顶点片段着色器的基本构成,以及对Shader有初步的认识;
  2. 利用顶点片段着色器做一些简单案例,比如一些游戏内常用的效果,与此同时深入学习Shader的语法,以及用到的相关数学运算符;
  3. 尝试优化自身的Shader,提升美术效果,减少变体数,减少运算量;
  4. 读一读渲染管线的书,加深对Shader理解的宽度与高度;
  5. 开始接触光照模型,了解Surface Shader;
  6. 各种光照算法研究一通。。。顺便复习下数学;
  7. 屏幕后处理Shader;
  8. Compute Shader;
  9. 各种势力制作,不断强化美感,图形学以及教学。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值