第一章:漫反射着色器-Diffuse Shading《Unity Shaders and Effets Cookbook》

Unity Shaders and Effets Cookbook

《着色器和屏幕特效制作攻略》

这本书可以让你学习到如何使用着色器和屏幕特效让你的Unity工程拥有震撼的渲染画面。

                                                                                                       —— Kenny Lammers


​Unity Shaders and Effets Cookbook

第一章:漫反射着色器

介绍

第1节. 创建基础表面着色器

        1.1、准备工作

        1.2、如何实现...

        1.3、实现原理...

        1.4、另请参阅

第2节.为表面着色器添加属性

        2.1、如何实现...

        2.2、实现原理...

        2.3、另请参阅

第3节. 在表面着色器中使用材质属性

        3.1、如何实现...

        3.2、实现原理...

第4节. 创建自定义漫反射光照模型

        4.1、如何实现...

        4.2、实现原理...

        4.3、更多内容...

        4.4、另请参阅

第5节. 创建半兰伯特照明模型

        3.1、如何实现...

        3.2、实现原理...

第6节. 创建一个渐变纹理来控制漫反射的着色

        6.1、准备工作

        6.2、如何实现...

        3.2、实现原理...

第7节. 使用2D渐变纹理模拟BRDF

        7.1、准备工作

        7.2、如何实现...

        7.3、实现原理...

        7.4、另请参阅


 Unity Shaders and Effets Cookbook

《着色器和屏幕特效制作攻略》

I like this book!记录学习过程并分享!


第一章:漫反射着色器

本章覆盖的内容是游戏开发中,在着色器流水线里一些常见的漫反射技术。你将会学到: 

介绍

        漫反射的内部结构,或者光照模型决定着一个shader质量的高低。所以,在开始写shader时,自定义漫反射计算的过程是非常有意义的。 在早期的计算机图形学中,漫反射着色器是使用固定功能的光照模型来完成的,图形程序员也只能稍微调整一下内置的这个光照模型,并且里面只能使用一组参数和纹理。在目前的行业中,Cg语言让我们对它可以进行更多的控制,并且还具备很大的灵活性,尤其是unity中的表面着色器。

        在Shader中,漫反射的组成部分基本上描述了光从表面向各个方向反射的方式。这和反光镜的工作原理很像。但它们是有区别的。反光镜是一个带有反光的表面,它其实反射的是周围的环境图。但漫反射光照是把所有的光从光源的位置,将光线反射回观察者的眼中,比如我们把太阳比作光源的位置。在后边的章节中会说到反射。 目前而言,目的只是为了区分一下两者。 

        为了实现一个基础漫射光照模型,我们需要创建一个着色器,并且里面需包含自发光颜色、环境光颜色以及所有光源累积的总和。下面会来演示并创建一个完整的漫反射光照模型,同时也展示了一些不同的行业技巧,比如只使用纹理来创建模拟更复杂的漫反射光照模型的方法。

        最后,本章内容你将会学习到如何创建基础着色器的基本操作。凭借此知识点,你可以创建几乎任何表面着色器。

第1节. 创建基础表面着色器

        当我们进一步深入到本书的内容时,需要对Unity软件的基础使用有所了解,这点很重要。它会大大提高你的制作效率。如果你在Unity中可以非常熟练的创建着色器和材质球,那么就可以跳过这一节。这节是专门为了让新手顺利学习本书接下来的内容而准备的。    

  

        1.1、准备工作

        打开Unity引擎,开始以下内容。首先创建一个新工程。本书提供了一个Unity的工程文件,所以你可以直接使用这个工程,当完成每一步的着色器(Shader)编写以后,只需要把自己写的Shader添加上去即可。做完这些准备后,我们开始走进实时着色器的奇妙世界。

        1.2、如何实现...

        在第一个着色器开始之前,为了方便接下来的操作我们先创建一个小场景,创建完成后你可以在GameObject菜单中添加需要的游戏组件。这里我们创建一个平面(plane)作为地面,和几个球体(sphere)用来展示我们写好的shader的渲染效果。场景中再添加一盏平行光。准备完成后,我们开始进入着色器的编写步骤:

  •  步骤1:在Unity编辑器的Project面板中,选择Assets文件夹,并右键单击选择Create | folder。如下图1.1所示:

图1.1

        【 这里需要注意的是,Project面板的布局设置的是:两栏布局(Two Column Layout)。如下图1.2所示: 】

图1.2

【如果你使用的是本书自带的Unity项目,可以直接跳到第4步。】

  • 步骤2:将新创建的文件夹命名为Shaders(这个文件夹用来装我们写的着色器—Shader)。选择文件夹单击右键,在下拉列表中选择Rename进行重命名。或者选择文件夹点击键盘上的F2键,也可以重命名。 
  • 步骤3:接下来再创建一个文件夹并将其命名为Materials(这个文件夹用来装材质球—Material)。如图1.3创建好了两个件夹并完成了重新命名:

  

图1.3

  • 步骤4:选择Shaders文件夹右键单击,出现下拉菜单后,点击Create | Shader(意思是在Shaders文件夹中创建一个着色器文件)如图1.4所示。 然后选择 Materials文件夹,步骤同上继续右键单击,在下拉菜单中选择Create | Material(意思是在Materials文件夹中我们创建一个材质球)如图1.5所示。

图1.4

​​图1.5

  • 步骤5:将着色器和材质球都重命名为BasicDiffuse。如图1.6所示:

图1.6

        【 注意:在步骤6开始之前(即打开Shader文件前),我们需要配置一下代码环境,可以安装Visual Studio Code(简称VSCode)或者Visual Studio。安装好之后在顶部菜单栏中单击Edit菜单选择Preferences | External Tools,在External Script Editor的下拉菜单中选择你所安装的代码配置环境的软件,如下图安装的是Visual Studio Code。图1.7是Unity2018版本里面的设置界面,图1.8是Unity2021版本里面的设置界面,这里就不展示更早期Unity的设置界面了。】

图1.7

图1.8

  • 步骤6:这时我们就可以双击BasicDiffuse.shader打开Shader文件了,现在就可以显示Shader的代码了。(在早期老的Unity版本中如果不配置代码环境,双击shader文件时,Unity会使用默认脚本编辑器MonoDevelop打开,在这里我们使用的是外部配置代码环境)。VSCode安装包下载地址:【免费】VSCode安装包(VSCodeUserSetup-x64)资源-CSDN文库

【 打开着色器(Shader)文件后,你会看到Shader中有默认的代码,这是Unity中自带的。 在默认的Shader里会自带一个基础的漫反射光照模型并且还计算了一个纹理采样。我们会基于这个代码来学习,在它的基础上进行修改调整,快速开发成为自己的自定义着色器。】

  • 步骤7:下面给我们的着色器赋予一个在材质球中选中的文件路径。我们在Shder的第一行代码里修改它。目的是为了便于在材质球中的Shader下拉列表中快速找到它。 我们将Shader路径重命名为“CookbookShaders/BasicDiffuse”。(这个名字并不是一成不变的,你是可以随意修改它,因此不用担心任何的依赖关系)如下所示:

Shader "CookbookShaders/BasicDiffuse" 

  • 修改完成之后点击键盘上的Ctrl+S,保存着色器,回到Unity编辑器中。 当Unity识别到文件已经更新时,它会自动编译Shader。 这时你的着色器中的代码应该是如下所示的样子:
Shader "CookbookShaders/BasicDiffuse" 
{
 Properties 
 {
 _MainTex ("Base (RGB)", 2D) = "white" {}
 }
 SubShader 
 {
 Tags { "RenderType"="Opaque" }
 LOD 200
 CGPROGRAM
 #pragma surface surf Lambert
 sampler2D _MainTex;
 struct Input 
 {
 float2 uv_MainTex;
 };
 void surf (Input IN, inout SurfaceOutput o) 
 {
 half4 c = tex2D (_MainTex, IN.uv_MainTex);
 o.Albedo = c.rgb;
 o.Alpha = c.a;
 }
 ENDCG
 }
 FallBack "Diffuse"
}
  • 步骤8:选择我们在步骤4中创建的名为BasicDiffuse的材质球,并查看它的Inspector面板。 从Shader下拉列表中,选择CookbookShaders | BasicDiffuse 如图1.9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值