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 -- 改善场景的反射光照效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201258

相关文章

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

【反射知识点详解】

Java中的反射(Reflection)是一个非常强大的机制,它允许程序在运行时检查或修改类的行为。这种能力主要通过java.lang.reflect包中的类和接口来实现。 通过反射,Java程序可以动态地创建对象、调用方法、访问字段,以及获取类的各种信息(如构造器、方法、字段等)。 反射的用途 反射主要用于以下几种情况: 动态创建对象:通过类的Class对象动态地创建其实例。访问类的字段

Go 在orm中使用反射

作为静态语言,golang 稍显笨拙,还好 go 的标准包reflect(反射)包弥补了这点不足,它提供了一系列强大的 API,能够根据执行过程中对象的类型来改变程序控制流。本文将通过设计并实现一个简易的 mysql orm 来学习它,要求读者了解mysql基本知识,并且跟我一样至少已经接触 golang 两到三个月。 orm 这个概念相信同学们都非常熟悉,尤其是写过rails的同学,对acti

类型信息:反射-Class

在说反射前提一个概念:RTTI(在运行时,识别一个对象的类型) public class Shapes {public static void main(String[] args) {List<Shape> shapes = Arrays.asList(new Circle(), new Square(), new Triangle());for (Shape shape : shapes

嵌入式技术的核心技术有哪些?请详细列举并解释每项技术的主要功能和应用场景。

嵌入式技术的核心技术包括处理器技术、IC技术和设计/验证技术。 1. 处理器技术    通用处理器:这类处理器适用于不同类型的应用,其主要特征是存储程序和通用的数据路径,使其能够处理各种计算任务。例如,在智能家居中,通用处理器可以用于控制和管理家庭设备,如灯光、空调和安全系统。    单用途处理器:这些处理器执行特定程序,如JPEG编解码器,专门用于视频信息的压缩或解压。在数字相机中,单用途

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

【Godot4.3】多边形的斜线填充效果基础实现

概述 图案(Pattern)填充是一个非常常见的效果。其中又以斜线填充最为简单。本篇就探讨在Godot4.3中如何使用Geometry2D和CanvasItem的绘图函数实现斜线填充效果。 基础思路 Geometry2D类提供了多边形和多边形以及多边形与折线的布尔运算。按照自然的思路,多边形的斜线填充应该属于“多边形与折线的布尔运算”范畴。 第一个问题是如何获得斜线,这条斜线应该满足什么样