《Unity着色器和屏幕特效开发秘笈》—— 1.7 创建渐变纹理来控制漫反射着色

简介:

本节书摘来自华章出版社《Unity着色器和屏幕特效开发秘笈》一 书中的第1章,第1.7节,作者:(美)Kenny Lammers,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.7 创建渐变纹理来控制漫反射着色

在你的着色器编写工具箱里还有一个强大的工具——使用渐变纹理(ramp texture)来控制漫反射光照的颜色。这允许你突出表面的颜色,来模拟更多的反射光照或者其他高级的灯光设置。你可以在很多卡通风格的游戏中看到这种技术,通常在你想要更加艺术的画面效果,并且不需要很多真实物理模拟的光照模型时可以使用渐变纹理。
该技术在《军团要塞2》中流行起来,它也是由Valve提出来用于渲染他们的游戏角色。他们发表了一篇非常有名的白皮书,强烈建议你阅读一下。
这篇论文的白皮书讲解了《军团要塞2》中使用的光照和渲染技术。

1.7.1 准备工作
首先你需要用图像编辑软件创建一个渐变纹理,在这里我们使用Photoshop来制作一张特殊图片,不过不管哪个图像编辑软件都可以用来制作渐变纹理。
screenshot

1.7.2 如何操作
让我们通过如下代码开启我们的着色器:
简单修改光照函数,添加如下代码:
screenshot

执行上述代码,可以得到下图展示的效果:
screenshot

1.7.3 实现原理

这行代码返回的是一个名为float3的颜色集,相当于r、g、b三个属性,这些颜色是通过tex2D的CG函数生成的。tex2D函数有两个参数,第一个参数是我们使用的纹理属性,第二个参数包含的是映射纹理的UV坐标。
在这种情况下我们并不需要使用顶点的UV值,而仅仅需要使用一个漫反射浮点值来映射到渐变图上的某一个颜色值。最终根据灯光计算后的方向来映射整个渐变纹理到物体的表面。
我们得到经过Half Lambert计算之后的新纹理映射值,并将之转换成float2()类型从而创建纹理索引值。当hLambert值为0时,tex2D函数会去搜索(0,0)UV坐标处的像素,在我们的示例里它会呈现渐变纹理中对应的蜜桃色,当值为1时,则会返回(1,1)UV坐标处的像素值,也就是白色。
现在,渲染艺术家们应该拥有了一些自定义方法来控制灯光在物体表面的效果了。这也就是为什么这项技术会经常出现在需要更多直观展示效果的项目当中。

相关文章
|
4月前
|
算法 安全 图形学
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
|
4月前
|
API 图形学
Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)
Unity Hololens2开发|(十)MRTK3空间操作 ObjectManipulator (对象操控器)
|
4月前
|
Go 图形学
Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
Unity Hololens2开发|(九)MRTK3空间操作 ConstraintManager(约束)
|
4月前
|
算法 图形学 UED
Unity Hololens2开发|(八)MRTK3空间操作 BoundsControl(边界控制)
Unity Hololens2开发|(八)MRTK3空间操作 BoundsControl(边界控制)
|
4月前
|
图形学
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
Unity Hololens2开发|(七)MRTK3子系统 TextToSpeechSubsystem(文本转语音)
|
4月前
|
图形学
Unity Hololens2开发|(六)MRTK3子系统 DictationSubsystem(听写功能)
Unity Hololens2开发|(六)MRTK3子系统 DictationSubsystem(听写功能)
|
4月前
|
图形学
Unity Hololens2开发|(五)MRTK3子系统 KeywordRecognitionSubsystem(关键字识别)
Unity Hololens2开发|(五)MRTK3子系统 KeywordRecognitionSubsystem(关键字识别)
|
5月前
|
图形学
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
|
5月前
|
设计模式 存储 前端开发
【Unity3D日常开发】Unity3d中使用MVC框架
【Unity3D日常开发】Unity3d中使用MVC框架
|
11月前
|
人工智能 算法 安全
开源游戏区块链项目分享:Unity开发的独立区块链
开源游戏区块链项目分享:Unity开发的独立区块 2023年了,区块链在这此时代热浪下都已经是即将燃尽的火苗了,而ChatGPT、Stable Diffusion等AI产品已经成为当下风口和热浪。然而区块链作为上一任浪热下的余晖,真的就这么完事了么?其实目前区块链在国内更多作为信用链存在,用于法律签约、物流运输、商务合作、加密合约等等公共底层方面。 而此文将不仅探讨区块链的其他实际用途,同时也开源了一个Unity3D C#编写的区块链代码,如果你是技术人员,刚好你做区块链项目,希望这个文章和代码能帮助到你。
552 0