Unity Lighting -- 改善场景的反射光照效果

2023-10-13 05:59

本文主要是介绍Unity Lighting -- 改善场景的反射光照效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Unity中反射光照是如何工作的

        先来看个案例问题,下图中,苹果的反射效果看起来是很奇怪的。

         在它的表面上反射了两种不同颜色的Spot Light光源,还反射了不属于室内环境的来自天空盒的光线,这是有问题的。在解决这个问题之前,我们需要知道在Unity中反射是如何工作的。

Unity中的反射

        在游戏或实时应用中,反射贴图(反射映射,reflection mapping)是用来模拟反射的方法,它会假设所有场景中可反射光的物体都能看到相同的环境。在诸如室外场景的简单开放空间中,这并没有什么问题。但在室内场景或更复杂的环境中则会出点问题(里面会增加许多影响反射的变量)。

        举个例子,想象有一个赛车游戏,其中部分路面通过一个隧道包裹了起来。如果玩家在隧道内的时候,车身仍然反射了天空的光线,那么会非常影响体验。

        在Unity中,我们可以使用Relection Probes来改善场景中的反射效果质量,它通过在关键点上采样环境信息,来确定此处是否会对反射产生影响。

Reflection Probes如何工作

        Reflection Probes在场景中,以一个cubemap的形式记录来自某个点的可见的环境和光照信息,我们可以将它看做是一个立方体,有六个纹理,在立方体的内表面上,这些纹理记录了场景中的特定点的反射信息。这个概念和用于生成天空盒的cubemap是类似的。

        当一个游戏物体的shader访问Reflection Probes的cubemap时, 这个物体表面的每个点能够看到这个cubemap的一小部分,这一小部分的区域是由这个表面的朝向所决定的。Shader在计算游戏物体表面的颜色时,会使用该点对应的cubemap中相关的颜色信息。

        在Unity中每个场景实际上都有一个秘密的Reflection Probe用来采样天空盒。这个Reflection Probe提供了场景中的基础反射信息,这也是前面例子中金属苹果反射了天空光线的原因所在。

        Reflection Probes周围也有一个不可见的盒子来表示其作用范围(zone of effect)的,我们可以配置这个盒子的大小。处于Reflection  Probe作用范围内的反射性物体,计算反射的cubemap是由这个Reflection Probe所提供的。当物体从一个范围移动到另一个范围时,cubemap也会相应改变。之前所提到的赛车游戏中,我们可以为隧道设置一个Reflection Probe,在隧道范围内使用这个Relection Probe所提供的信息来计算反射光照效果。

放置并配置Reflection Probe

        回到最初的那个金属苹果反光问题,我们在场景中放置一个Reflection Probe来解决这个问题:

        1. 在Hierarchy窗口(空白处右键选择Light -> Refleciton Probe)或通过主菜单栏(GameObject -> Light -> Refleciton Probe)添加一个Refleciton Probe

        2. 将Refleciton Probe放置到苹果前面,它越接近苹果的实际位置,反射信息计算就会越精确

            我们会看到,除了spotlight的反射外,放置了Refleciton Probe后,苹果会变成黑色,这是因为苹果进入了Refleciton Probe的作用范围内了(这个作用范围空间是一个立方体表示的,缩放场景可以看到这个盒子)。

         3. 在Refleciton Probe的Inspector中,确认一下Type是Baked。在Runtime Settings中,启用Box Projection属性

         Box Projection属性启用后,苹果表面的反射光计算,会和苹果在Refleciton Probe的作用区域内的位置相关。

        4. 调整一下Box Size的X,Y,Z值以及Reflection Probe的位置,让Refleciton Probe的作用区域覆盖到我们想要的区域(下图黄色框线表示盒子的大小和位置,仅为示例)

         5. 点击Reflection Probe的Inspector面板中最后的Bake按钮进行烘焙

         Reflection Prboe需要独立烘焙,除非我们启用了auto-baking(在Lighting窗口中的Auto Generate选项)。

        6. 最后,来看看烘焙后,这颗金属苹果的反光效果怎么样

这篇关于Unity Lighting -- 改善场景的反射光照效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/vivo01/article/details/129627727
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/201258

相关文章

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

Java中Runnable和Callable的区别和联系及使用场景

《Java中Runnable和Callable的区别和联系及使用场景》Java多线程有两个重要的接口,Runnable和Callable,分别提供一个run方法和call方法,二者是有较大差异的,本文... 目录一、Runnable使用场景二、Callable的使用场景三、关于Future和FutureTa

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex