欢迎来真孝善网,为您提供真孝善正能量书籍故事!

Unity 渲染器基础教程与全面总结

时间:11-16 神话故事 提交错误

书籍:

《Unity Shaders and Effects Cookbooks》 作者读的第一本书

《GPU 编程与CG 语言之阳春白雪下里巴人》可以帮助您了解硬件。这本书的作者写得非常好。

《Real-Time Rendering.3rd》 经典,但不适合初学者

《Unity shader入门精要》 一个女生写的书,适合大多数想学习unity Shader的初学者

《untiy3d ShaderLab实战详解》 适用于入门级unity着色器

《3D数学基础:图形与游戏开发》 如果你真的想学好shader,你必须学好数学。我认为这是一本比较系统、全面、适合入门的数学书。

《GPU编程精粹》系列高手可以尝试这个,但不适合初学者学习。

《Unity5.X从入门到精通》着色器章我相信官方水平

我暂时推荐这些书,但实际上还有更多。有需要的话可以互相交流。

博客和教材:

Stormy 着色器教程系列

Unity着色器官方手册

Unity 中的Cg 编程

CgCookie Shader初级视频教程

CgCookie Shader 中级视频教程

《unity shader入门精要》 作者博客

国外教学视频

这些是目前的学习材料。如果大家有更好的,欢迎补充。

逆天利器:

着色器锻造

用于编写着色器的可视化编辑器大大降低了编写着色器的难度。也方便开发者了解shader,大大提高开发效率,适合初学者(一般高手鄙视这个工具,都是高手手写)

Shader Forge插件百度网盘

Shader Forge 教学视频百度网盘

vs2013自动代码补全、语法高亮插件

相信大多数开发者都已经习惯了VS,但是VS不支持shader代码高亮和自动补全。这是无法容忍的。庆幸的是,作者在github上混了很多年,也有很多奇怪的人、奇怪的事,所以就找到了这个插件。

VS Code 高亮自动完成插件

shader基础

概念:Shader(着色器)实际上是一个小程序,负责将输入的Mesh(网格)与输入的纹理或颜色按照指定的方式组合起来,然后输出。绘图单元可以根据该输出将图像绘制到屏幕上。输入的纹理或者颜色等,加上对应的Shader,以及Shader的具体参数设置一起打包存储,结果就是一个Material。之后,我们就可以将材质分配给合适的渲染器进行渲染(输出)。

Shader只是一个指定输入(颜色、纹理等)和输出(渲染器可以理解的点和颜色之间的对应关系)的程序。 Shader开发者要做的就是根据输入进行计算和变换并生成输出。

如图所示:

可以用一句话来概括:

1.GameObject中有MeshRenderer。

2、MeshRenderer中有一个Material列表。

3、每种Material中只有一个Shader;

4.Material在编辑器中公开Shader的可调整属性。

所以,关键是shader怎么写。

unity自建shader使用说明:

Standard Surface Shader会生成一个包含标准护理模型的表面着色器模板(使用Unity5中新添加的基于物理的渲染方法)(为我们提供了典型的表面着色器实现方法)

Unity 着色器将生成一个基本的顶点/片段着色器,没有光照(但有雾)

图像效果着色器为我们实现各种屏幕后处理效果提供了基础模板。

计算着色器将生成一个特殊的着色器文件。这类着色器的目的是利用GPU的并行性来执行一些与常规渲染管线无关的计算。

Unity Shader文件操作说明:

显示生成的代码对于表面着色器,我们通过单击“显示生成的代码”按钮打开一个新文件,该文件将显示Unity 在幕后为表面着色器生成的顶点/片段着色器。

编译并显示代码下拉列表允许开发人员检查最终编译成Unity 着色器所针对的不同图像编程接口(例如opebgl、d3d9、d3d11 等)的着色器代码。我们可以使用这些代码来分析和优化着色器。

Unity内置shader文件分析:

CGincludes 文件夹包含所有内置包含文件

DefaultResources 文件夹包含某些内置组件或功能所需的统一着色器,例如某些GUI 元素使用的着色器。

DefaultResourcesExtra 包含统一的所有内置着色器

Editor文件夹目前只包含一个脚本文件,用于定义unity5中引入的标准着色器使用的材质面板。

(可以从官网下载内置文件:https://unity3d.com/cn/get-unity/download/archive)

Unity Shader的结构

在Unity中,当我们编写着色器时,我们使用ShaderLab。 ShaderLab 是Unity 提供的一种声明性语言,用于编写Unity 着色器。

基本结构如下:

简单来说,可以概括为下图:

着色器名称:

每个Unity Shader文件的第一行都需要通过Shader语义来定义Shader的名称。

着色器属性:

Properties语义块包含一系列属性,这些属性将显示在材质面板中。

属性的语义块通常采用以下形式:

其中,_Color代表属性的名称,‘Main Color’代表材质面板上出现的名称。颜色是为属性定义的类型。默认值代表我们为属性设置的默认值。当我们第一次将Unity Shader分配给材质时,它的默认值会显示在材质面板上。

上述类型可分为以下几类:

数值类型:默认值为data,如Int.Float.Range

四维向量:它们的默认值是用括号包围的四维向量,例如Color.Vector

纹理类型:它们的默认值由一个字符串后跟一个大括号指定,其中该字符串可以为空,也可以为内置纹理的名称,例如“black”、“white”等。 大括号的使用最初用于指定一些纹理属性,但这些选项在Unity 5.0之后的版本中被删除。

具体代码如下:

Properties 语义块的目的只是允许这些属性出现在材质面板中:

子着色器

1.设置渲染状态:

ShaderLab提供了一系列渲染状态设置指令。这些指令可以设置显卡的各种状态,例如开启混合/深度测试。具体选项如下。

2. 标签:

SubShader的标签是一个键值对,它的键和值都是字符串类型。这些键值对是SubShader和渲染引擎之间的沟通桥梁。标签的结构如下:

标签{ " TagName1 "=" Value1 " " TagName2 "=" Value2 "}

标签声明只能在SubShader 场景中声明,不能在Pass 块中声明。虽然也可以在Pass中定义标签,但这些标签与SubShader中的标签不同。具体内容请参考官方文档:https://docs.unity3d.com/Manual/SL-SubShaderTags.html

3.传递语义块:

【名称】:首先我们可以在Pass中定义Pass的名称。

[Tags]:Pass语义块的标签与SubShader的标签不同。以下是Pass 语义块中的标签类型:

4.后备:

该指令用于当其他SubShaders无法操作时,使用Fallback值中的Shader。

Unity Shader的形状:

固定管道

固定管道是为了与旧显卡兼容。它们都是顶点照明。未来,固定管线可能会成为Unity废弃的功能,所以最好不要学习它,当它不存在一样。

顶点/片段着色器

上图是可编程着色器的编程格式。它既复杂又高度灵活。它一直是编写着色器的最喜欢的方式。具体使用方法和参数请参考官方文档:https://docs.unity3d.com/Manual/SL-SubShaderTags.html

表面着色器

表面着色器是顶点/片段着色器之上的抽象包。目的是模拟人类的思维方式,大大降低开发人员的开发难度,使编写的程序易于理解和交流。代码量大大减少。但缺点是程序灵活性低、可扩展性低、性能消耗较高。

具体内容请参考官方文档:https://docs.unity3d.com/Manual/SL-SubShaderTags.html

选择Unity Shader的建议

1. 除非设备不支持可编程管线着色器,否则请考虑使用固定功能着色器。否则,请使用可编程管道着色器。

2. 如果要播放各种光源的资源,可以使用表面着色器,但要注意其在移动端的表现。

3.如果需要使用的灯光数量很少,那么顶点/片段着色器是更好的选择。

4. 如果有很多自定义渲染效果,请选择顶点/片段着色器。

总结

Shader是一门博大精深的学科,因为它涉及到很多计算机图形学相关的内容,仅仅靠一两篇博客是无法解释清楚和理解的。读者如果想要深入学习着色器编程,就必须花费大量的时间来打下基本功。学习不是一朝一夕就能完成的。而且,在学习的过程中,你不仅要知道“怎么用”,更重要的是“为什么要这样用”,通过问题的表象多思考问题的本质,这样才能继续朝着成为一个伟大的人的方向前进!

用户评论

花容月貌

想学做一个Unity里的游戏美术,这篇文章正好可以帮我入门!

    有15位网友表示赞同!

话少情在

一直对Shader这个东西比较好奇,终于有机会了好好学习一下。

    有10位网友表示赞同!

我的黑色迷你裙

入门指南太棒了,我最近刚开始接触Unity做3D作品,希望能帮上忙。

    有8位网友表示赞同!

来自火星的我

总结部分肯定很有用,能帮我理清 Shader 的应用场景和技巧。

    有17位网友表示赞同!

万象皆为过客

看到"入门指南"就忍不住想点开看看,也许我也可以尝试制作一些特效啦。

    有7位网友表示赞同!

炙年

Unity的Shader确实强大,这篇文章应该会有很多实用的小知识分享吧!

    有20位网友表示赞同!

淡抹丶悲伤

学习UGI一直都很想去深入理解Shader机制,这篇指南太好了!

    有16位网友表示赞同!

怪咖

希望入门指南能通俗易懂,这样我就好上手了。

    有12位网友表示赞同!

念安я

我之前看过一些Shader的教程,感觉很抽象,不知道这篇文章会更具体?

    有11位网友表示赞同!

命里缺他

学习Shader可以让我更好地控制游戏画面效果,真的很有吸引力!

    有12位网友表示赞同!

孤者何惧

看标题就知道这是一篇很棒的文章,收藏 duluuu~

    有6位网友表示赞同!

糖果控

我做的是平台游戏, Shader 也许能帮我制作一些新奇的效果呢?

    有16位网友表示赞同!

青衫故人

想要在Unity里创作更酷炫的游戏画面,Shader 绝对是必不可少的技能!

    有18位网友表示赞同!

柠栀

终于找到了一些关于Shader学习的资源了,太开心了!

    有13位网友表示赞同!

矜暮

这篇指南能提供哪些具体的 Shader 应用案例呢?我很期待!

    有9位网友表示赞同!

微信名字

学习Shader 的途径很多,这款指南能让我更好地选择方向吗?

    有7位网友表示赞同!

_心抽搐到严重畸形っ°

我曾经尝试过一些基础的 Shader,这篇文章会不会带给我全新的技巧?

    有6位网友表示赞同!

一纸愁肠。

学习 Shader 需要哪些基础知识?文章里有介绍吗?

    有13位网友表示赞同!

青瓷清茶倾城歌

我对Unity游戏开发很感兴趣,Shader也是重要的一部分!

    有5位网友表示赞同!

【Unity 渲染器基础教程与全面总结】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活