《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菜单来完成。然后可以创建一个平面作为地面,创建两个球体作为着色器的应用对象,以及一个定向光作为场景的灯光。场景建立完毕,我们就可以开始编写着色器了:

  1. 在Unity编辑器的Project面板上,右击Assets文件,选择Create | Folder。
    screenshot
  1. 重命名创建的着色器文件夹,可以选中文件夹然后右击选择“Rename”,也可以使用键盘上的“F2”键。
  2. 创建另一个文件夹,将其重命名为“Materials”。
  3. 选中着色器文件夹单击右键,选择Create | Shader。然后在“Materials”文件夹上单击右键,选择Create| Materials。
  4. 将刚才创建的Shader和Material都重命名为BasicDiffuse。
  5. 双击BasicDiffuse着色器,打开MonoDevelop(Unity的默认脚本编辑器),它将会自动启动编辑器并显示着色器代码。
    你会看到Unity已经为我们添加了一些基本的着色器代码,默认情况下,你将得到基本的漫反射着色器,它会接受一个纹理信息。我们会修改这些基本代码,这样我们就可以学习如何快速地开发自定义着色器。
  6. 现在我们需要给着色器一个自定义文件夹路径。着色器代码中的第一行是对着色器的自定义描述,这样我们就可以在Unity着色器下拉列表中找到它,并且将它赋给某个材料。我们已经将着色器路径重命名为Shader “CookbookShaders/BasicDiffuse”,但是你可以在你需要的任何时刻对它进行重命名。所以你无须担心它此刻的依赖关系。保存MonoDevelop的shader代码,回到Unity 编辑器。当它确认文件已更新时,Unity将自动编译着色器。这样可以使着色器实时地显示它的效果:
    screenshot

screenshot

  1. 选择我们在步骤4中创建的名为BasicDiffuse的材质,并在Inspector面板中进行查看。从Shader下拉列表中选择CookbookShaders| BasicDiffuse(如果你选择使用不同的路径名,你的着色器路径可能是不同的)。将你的着色器赋给材质,以便你可以将其赋给某个物体。
    要将材质赋给某个物体,可以从Project面板上通过简单选中拖曳至视图中的物体。也可以在Unity 编辑器中拖曳一种材质至物体的Inspector面板中。

screenshot

此时它看起来没什么效果,但着色器的开发环境已经设置好了,现在我们可以开始修改着色器代码,以满足我们的需求。

1.2.3 实现原理

Unity已经帮你完成了着色器和运行环境的建立,你只需要简单地点击几下鼠标便可以开始后面的工作了。对于表面着色器本身而言,很多元素都是在后台工作的。Unity采用Cg作为着色语言,Cg语言使你的代码编写更加高效。表面着色器语言大多基于组件的方式写入着色器。如纹理坐标和转置矩阵之类的功能Unity已经帮你实现了,因此你不必从头开始了。以前,为了编写一个新的着色器,你必须重复重写很多代码。在你已经熟悉表面着色器之后,你自然想探索更多关于Cg语言的基本功能,以及Unity是如何在底层的图形处理单元(GPU)上执行低级图形运算的。
因此,通过简单地更改着色器路径名,我们已经拥有了一个可以在Unity下运行的基础漫反射着色器,包含的灯光和阴影也能正常工作。而这一切的实现只需改变一行代码而已!

1.2.4 参考

为了了解更多关于Unity内置的大量Cg功能,可以访问Unity安装目录下的Unity4EditorDataCGIncludes,有三个文件需要特别注意的,UnityCG.cginc、Lighting.cginc和 UnityShaderVariables.cginc.。目前我们的着色器使用的正是这三个文件里的功能。
我们会在第9章更加深入地学习Cglncludes文件。

相关文章
|
5月前
|
算法 vr&ar C#
使用Unity进行虚拟现实开发:深入探索与实践
【8月更文挑战第24天】使用Unity进行虚拟现实开发是一个充满挑战和机遇的过程。通过掌握Unity的VR开发技术,你可以创造出令人惊叹的VR体验,为用户带来前所未有的沉浸感和乐趣。随着技术的不断进步和应用场景的不断拓展,VR开发的未来充满了无限可能。希望本文能为你提供有用的指导和启发!
|
4月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
345 0
|
4月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
163 0
|
5月前
|
vr&ar 图形学 开发者
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
183 0
|
7月前
|
C# 图形学 C++
使用vscode开发C#+unity没有代码提示问题
使用vscode开发C#+unity没有代码提示问题
106 0
使用vscode开发C#+unity没有代码提示问题
|
7月前
|
图形学
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
103 0
|
7月前
|
图形学
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
132 0
|
7月前
|
图形学 索引
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)
169 0
|
8月前
|
图形学
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
|
8月前
|
算法 安全 图形学
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)