《Unity着色器和屏幕特效开发秘笈(原书第2版)》一2.2 漫反射着色

简介:

本节书摘来自华章出版社《Unity着色器和屏幕特效开发秘笈(原书第2版)》一书中的第2章,第2.2节,作者 [英]艾伦朱科尼(Alan Zucconi) [美]肯尼斯拉默斯(Kenneth Lammers),更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.2 漫反射着色

在开始学习纹理映射之前,我们需要先理解漫反射着色是怎么工作的。某些物体的颜色比较均匀,表面很光滑,但是又不是光滑到那种像镜子一样光亮的程度。这种非反光材料最好的渲染方式就是使用漫反射着色器。虽然在真实世界中纯漫反射材料本身并不存在,但在游戏世界中漫反射着色器是一种大量用到的相对廉价的着色方式。

2.2.1 准备工作

创建漫反射着色器有多种方式。最快的一种方式是从Unity 5 的标准着色器开始,然后编辑标准着色器,移除所有纹理。在第1章中我们就是这么做的。

2.2.2 操作步骤

我们从标准着色器开始,按照下面的步骤逐步进行:

  1. 删除除_Color之外的所有属性:


c7633af14f52d28e64481ddb5064110adeeeea93
  1. 在SubShader{}部分,删除_MainTex、_Glossiness和_Metallic变量。注意不要删除uv_MainTex,因为Cg不接受空的输入。这个值会被忽略。
  2. 删除surf()函数的函数体,用下面的代码替换:


cb261f3312490c225c24925f9c68551e5dfc02c4
  1. 你的着色器应该看起来是这样的:

    de5c195e8e85c5f83007addec326c5fa6eaa060c


    因为该着色器是在一个标准着色器的基础上修改的,它会使用基于物理基础的渲染方式来模拟光照行为。如果你想做一种非拟实的外观,可以直接修改第一个#pragma指令来让其使用Lambert而不是Standard。如果你这么做了,还应该将SurfaceOutputStandard替换为SurfaceOutput。

    2.2.3 工作原理

    着色器中,材质的渲染属性和光照模型之间是通过表面输出来通信的。表面输出是对当前光照模型所需的所有参数的一个封装。所以你应该能理解不同的光照模型需要不同的表面输出结构了。下面列出了Unity 5中三种主要的表面输出结构。
    着色器类型 Unity 4 Unity 5
    漫反射着色器 任意表面着色器
    SurfaceOutput 标准着色器
    SurfaceOutputStandard
    高光着色器 任意表面着色器
    SurfaceOutput 标准着色器(高光设置)
    SurfaceOutputStandardSpecular

    SurfaceOutput结构有如下属性:
    fixed3 Albedo:表示材质的漫反射颜色。
    fixed3 Normal:如果写的话表示切面法线。
    fixed3 Emission:表示材质发射的颜色(该属性在标准着色器中声明为half3)。
    fixed Alpha:表示材质的透明度。
    half Specular:表示光亮度,值从0到1。
    fixed Gloss:表示光强度。
    SurfaceOutputStandard结构有如下属性:
    fixed Albedo:表示材质的基础颜色(表示是漫反射还是高光)。
    fixed3 Normal。
    half3 Emission:该属性声明为half3,而在SurfaceOutput中名字是fixed3。
    fixed Alpha。
    half Occlusion:表示遮挡,默认是1。
    half Smoothness:表示光滑度,0表示粗糙,1表示光滑。
    half Metallic:0表示非金属,1表示金属。
    SurfaceOutputStandardSpecular结构有如下属性:
    fixed3 Albedo。
    fixed3 Normal。
    half3 Emission。
    fixed Alpha。
    half Occlusion。
    half Smoothness。
    fixed3 Specular:表示高光颜色,与SurfaceOutput结构中的Specular属性有很大不同,这里可以指定一种颜色而非单一值。
    正确使用表面着色器很重要的一点是用正确的值初始化表面输出结构。

相关文章
|
3月前
|
算法 安全 图形学
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
|
3月前
|
API 图形学
Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)
Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)
|
3月前
|
Go 图形学
Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
|
3月前
|
算法 图形学 UED
Unity Hololens2开发|(八)MRTK3空间操作 BoundsControl(边界控制)
Unity Hololens2开发|(八)MRTK3空间操作 BoundsControl(边界控制)
|
3月前
|
图形学
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
|
3月前
|
图形学
Unity Hololens2开发|(六)MRTK3子系统 DictationSubsystem(听写功能)
Unity Hololens2开发|(六)MRTK3子系统 DictationSubsystem(听写功能)
|
3月前
|
图形学
Unity Hololens2开发|(五)MRTK3子系统 KeywordRecognitionSubsystem(关键字识别)
Unity Hololens2开发|(五)MRTK3子系统 KeywordRecognitionSubsystem(关键字识别)
|
4月前
|
C# 图形学
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
【Unity 3D】元宇宙案例之虚拟地球信息射线实战(附源码、演示视频和步骤 超详细)
48 0
|
4月前
|
人工智能 自然语言处理 区块链
【Unity 3D】元宇宙概念、应用前景、价值链等概述
【Unity 3D】元宇宙概念、应用前景、价值链等概述
49 0
|
4月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
【Unity 3D】VR飞机拆装后零件说明功能案例实战(附源码和演示视频 超详细)
36 0