《Unity着色器和屏幕特效开发秘笈》—— 1.2 创建基本的表面着色器
本节书摘来自华章出版社《Unity着色器和屏幕特效开发秘笈》一 书中的第1章,第1.2节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.2 创建基本的表面着色器随着我们进一步学习本书,你已经知道如何在Unity当中设置工作区,从而提高你的工作效率,而且这很容易实现。如果你已经熟悉了在Unity 4中创建着色器和设置材质,可以跳过这个教程。这里,我们只是为了确保新的Unity 4开发者能够顺利学习有关表面着色器的其他教程。
1.2.1 准备工作开始学习本教程之前,你需要先打开Unity 4,并且创建新的项目。在本书中有一个Unity项目,所以当你学习到相应的教程时,你可以使用这个项目并添加自定义的着色器。当你完成了这些,现在就准备进入实时阴影的奇妙世界吧!
1.2.2 如何操作在开始我们第一个着色器之前,我们需要创建一个小的场景(scene)供我们使用。这可以通过Unity编辑器中的GameObject | Create Other菜单来完成。然后可以创建一个平面作为地面,创建两个球体作为着色器的应用对象,以及一个定向光作为场景的灯光。场景建立完毕,我们就可以开始编写着色器了:
在Unity编辑器的Project面板上,右击Assets文件,选择Create | Folder。![screenshot screenshot](https://yqfile.alicdn.com/4f6eb88d15a04f247df28c55ce8bef4348e433a5.png)
重命名创建的着色器文件夹,可以选中文件夹然后右击选择“Rename”,也可以使用键盘上的“F2”键。 创建另一个文件夹,将其重命名为“Materials”。 选中着色器文件夹单击右键,选择Create | Shader。然后在“Materials”文件夹上单击右键,选择Create| Materials。 将刚才创建的Shader和Material都重命名为BasicDiffuse。 双击BasicDiffuse着色器,打开MonoDevelop(Unity的默认脚本编辑器),它将会自动启动编辑器并显示着色器代码。
你会看到Unity已经为我们添加了一些基本的着色器代码,默认情况下,你将得到基本的漫反射着色器,它会接受一个纹理信息。我们会修改这些基本代码,这样我们就可以学习如何快速地开发自定义着色器。 现在我们需要给着色器一个自定义文件夹路径。着色器代码中的第一行是对着色器的自定义描述,这样我们就可以在Unity着色器下拉列表中找到它,并且将它赋给某个材料。我们已经将着色器路径重命名为Shader “CookbookShaders/BasicDiffuse”,但是你可以在你需要的任何时刻对它进行重命名。所以你无须担心它此刻的依赖关系。保存MonoDevelop的shader代码,回到Unity 编辑器。当它确认文件已更新时,Unity将自动编译着色器。这样可以使着色器实时地显示它的效果:
![screenshot screenshot](https://yqfile.alicdn.com/3c49aab5c03078c302f812d7ebf4068b9c8d4002.png)
要将材质赋给某个物体,可以从Project面板上通过简单选中拖曳至视图中的物体。也可以在Unity 编辑器中拖曳一种材质至物体的Inspector面板中。
此时它看起来没什么效果,但着色器的开发环境已经设置好了,现在我们可以开始修改着色器代码,以满足我们的需求。
1.2.3 实现原理Unity已经帮你完成了着色器和运行环境的建立,你只需要简单地点击几下鼠标便可以开始后面的工作了。对于表面着色器本身而言,很多元素都是在后台工作的。Unity采用Cg作为着色语言,Cg语言使你的代码编写更加高效。表面着色器语言大多基于组件的方式写入着色器。如纹理坐标和转置矩阵之类的功能Unity已经帮你实现了,因此你不必从头开始了。以前,为了编写一个新的着色器,你必须重复重写很多代码。在你已经熟悉表面着色器之后,你自然想探索更多关于Cg语言的基本功能,以及Unity是如何在底层的图形处理单元(GPU)上执行低级图形运算的。
因此,通过简单地更改着色器路径名,我们已经拥有了一个可以在Unity下运行的基础漫反射着色器,包含的灯光和阴影也能正常工作。而这一切的实现只需改变一行代码而已!
为了了解更多关于Unity内置的大量Cg功能,可以访问Unity安装目录下的Unity4EditorDataCGIncludes,有三个文件需要特别注意的,UnityCG.cginc、Lighting.cginc和 UnityShaderVariables.cginc.。目前我们的着色器使用的正是这三个文件里的功能。
我们会在第9章更加深入地学习Cglncludes文件。
相关文章
- 《Node.js区块链开发》——2.5 风险提示
- (2)Angular的开发
- Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果
- iOS 9应用开发教程之创建iOS 9项目与模拟器介绍
- 从零开始学android开发-获取TextView的值
- 泰凌微TLSR8258芯片解决方案开发之串口打印级别设置
- 【Harmony OS】【ArkUI】ets开发 创建视图与构建布局
- 《HTML5开发手册》——2.11 高级“菜谱”:编写带有评论的文章页面
- 《PhoneGap移动应用开发手册》——1.8节创建可视化罗盘显示设备的移动方向
- 《Unity着色器和屏幕特效开发秘笈》—— 1.6 创建Half Lambert光照模型
- Qt开发经验小技巧131-140
- 《Swift iOS应用开发实战》——2.3 创建用户界面
- 《Unity开发实战》——3.5节创建透明纹理贴图
- 游戏开发常用算法系列(一)
- 外设驱动库开发笔记50:HP203B气压传感器驱动
- 外设驱动库开发笔记46:MAX31855热偶变送器驱动
- ClojureScript魔法堂:搭建开发环境
- Spider Studio 数据挖掘集成开发环境
- OpenHarmony应用开发之如何创建DAYU200预览器
- 轻量级的前端UI开发框架 - UIkit
- VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)
- 安卓开发学习笔记(二):如何用Android Stuidio在res资源下创建xml视图文件
- iOS开发 --重写UISearchBar的时候,点击取消searchbar会变深色,一闪而过