Light Functions (光照函数)


  • Light Functions (光照函数)

    • 概述
    • Decals(贴花) vs 光照函数
    • 可以使用哪些材质表达式?
      • Texture 2D(二维贴图)
      • Texture Cube(立方体贴图)
        • 如何旋转我的立方体贴图光照函数?
      • 注意
    • 可以使用哪种类型的光源?
    • 虚幻编辑器光照函数指南
      • 创建光照函数
      • 给光照函数添加光源
        • 光照函数属性
    • Unrealscript 光照函数指南
      • 嵌入的光照函数
      • 将光照函数添加到动态地创建的光源上
    • 相关主题
    • 下载

概述


光照函数是虚幻引擎3中光源应该如何照亮场景的数学表示。默认,光源将使用基于光源组件定义的各种输入的常量值;比如亮度和颜色。光照函数允许您定义更多有趣的设置来获得摇曳的光照、蒙板光照、闪动的光照、及贴图光照。光照函数使用虚幻引擎3中的材质系统,这使得美工人员和关卡设计人员可以很轻松地创建并修改它。同时,因为光照函数使用材质系统,所以可以实例化这些光照函数来获得各种变化效果。

LightFunctionsScreenShot.jpg

Decals(贴花) vs 光照函数

需要记住的非常重要的一点是光照函数仍然是光源,因此,如果您想在给物体投射光照的过程中投射贴图那么光照函数将是很有用的。光照函数也可以投射贴图立方体,但 decals不能。因此,某物是否投射光照是决定性因素。

可以使用哪些材质表达式?


并不是所有材质表达式都能和光照函数结合使用。这是因为某些表达式在和光照函数结合使用时没有什么意义。然而,大部分函数都可以使用。所有的数学表达式和贴图样本表达式都有效,但是,那些依赖于其他渲染目标或网格物体属性的表达式将会被忽略。请参照 材质表达式概要 页面作为参考指南,获得这些表达式的工作方式。

Texture 2D(二维贴图)

可以使用二维贴图,但是最好将它们保留应用于指定了方向的光源,比如定向光源和点光源。它们也可以用于聚光源,但是会出现贴图条带现象。如果定向光源的光照投射到了一个几乎垂直的表面时也会产生贴图条带现象。

具有带贴图光照函数的点光源。注意到顶棚和地面上有贴图条带。

LightFunctions_PointLightTexture2D.jpg

具有带贴图光照函数的聚光源。因为进有较少的几个表面接收到了光照,所以仅出现了少量的贴图条带。

LightFunctions_SpotLightTexture2D.jpg

具有带贴图光照函数的定向光源。注意在近乎垂直的表面上的贴图条带,比如某些墙壁上。

LightFunctions_DirectionalLightTexture2D.jpg

Texture Cube(立方体贴图)

贴图立方体用于立方体贴图映射。立方体贴图映射是一种环境映射的方法,将每个贴图定义为立方体的其中一个面。在这种情况下当在光照函数中使用立方体贴图时将会产生投影贴图映射。

具有带立方体贴图光照函数的点光源。没有出现明显的贴图条带。

LightFunctions_PointLightTextureCube.jpg

具有带立方体贴图光照函数的聚光源。没有出现明显的贴图条带。

LightFunctions_SpotLightTextureCube.jpg

具有带立方体贴图光照函数的定向光源。没有出现明显的贴图条带。

LightFunctions_DirectionalLightTextureCube.jpg

这样做意味着您应该总是使用立方体贴图吗? 答案取决于您正在执行哪种类型的投射及您想让它如何影响场景。立方体贴图非常依赖于不会创建任何缝隙的贴图设置。同时,也很难轻松地在材质中平移或旋转贴图立方体。

如何旋转我的立方体贴图光照函数?

最简单的方法是旋转光源actor。光源actor的旋转值将会调整材质中所使用的光源向量的值。

LightFunctions_RotatingLightFunction.jpg

注意

光照函数不能指定光源的最大亮度,因为它是通过光源组件进行设置。但是,光照函数可以作为一个缩放比例来调整光源的最终亮度。

一个光照函数可以输出一个颜色,但是,除非光源组件本身是用了白色否则将不会计算光照函数的颜色。您可以使用Desaturate材质表达式来调整使用了着色贴图的光照函数。

可以使用哪种类型的光源?


唯一不支持的光源类型是天空光源,但是,这是有道理的,因为天空光源简单地定义了任何地方的环境光照。如果需要,光源可以是任何变种类型:动态光源、可移动的光源或可切换的光源及投射动态阴影的光源。不能为静态光源创建光照函数;如果选择了不合适的光源虚幻编辑器创建光照函数将会失败。

虚幻编辑器光照函数指南


创建光照函数

要创建一个新的光照函数,首先要在内容浏览器中创建一个新的材质。设置您想存储这个材质的包和组(如果光照函数时针对关卡的,那么甚至可以设置为您的关卡),然后设置您想调用这个光照函数执行什么处理。

LightFunctions_0_CreateNewMaterial.jpg

为了使得虚幻引擎3将这个材质识别为用作为光照函数,那么必须在材质属性中进行明确地设置。可以通过展开 Mutually Exclusive Usage 类别,然后点击 Used As Light Function(用作为光照函数) 项。

LightFunctions_1_SetUsedAsLightFunction.jpg

创建如下所示的一个简单的光照函数。这个光照函数平滑地插值较暗光照和较亮光照。

LightFunctions_2_SimpleLightFunction.jpg

关闭材质编辑器并选择yes(是)来保存材质。然后保存包。

给光照函数添加光源

首先要确保的是光源是适合应用光照函数的类型的变种。您可以右击光源actor,使用关联菜单在各种光源变种间切换。对于光照函数,您将需要确保使用 Dominant(主光源) Moveable(可移动光源) Toggle-able(可切换光源) 类型光源的变种。

LightFunctions_ConvertLight.jpg

打开光源actor的属性。展开 Light 类别,然后找到 Light Component 对象。在 Light Component 对象中,展开 Light Component 类别。

LightFunctions_3_ExpandCategories.jpg

点击 Light Function 域旁边的蓝色箭头。然后点击出现的关联菜单中的 Light Function 。这将创建一个新的 Light Function 对象。

LightFunctions_4_CreateNewLightFunction.jpg

展开 Light Function(光照函数) 对象, 选择您在上面制作的光照函数,并点击绿色的箭头来设置光照函数的 Source Material(源材质) 域。如果您应用一个使用了贴图的光照函数,那么您也可以投影的缩放比例。

LightFunctions_5_LightFunctionSet.jpg

光照函数属性

  • Source Material(源材质) - 光照函数所使用的材质。
  • Scale(缩放比例) -
    • X - 调整X轴上的投影比例。
    • Y - 调整Y轴上的投影比例。
    • Z - 调整Z轴上的投影比例。
  • Disabled Brightness(禁用的亮度) - 这是当指定了光照函数时应用到光源上的亮度因数,但是处于禁用状态。比如,在使用 SceneCapView_LitNoShadows的场景截图中。这应该设置为光照函数的自发光输入端的平均亮度,值应该在0.f 和1.f之间。

Unrealscript 光照函数指南


嵌入的光照函数

可以使用Unrealscript在默认属性部分创建光照函数。当您已经在Unrealscript中创建了光照函数后,那么您可以将创建好的光照函数迁入到一个附加的光源组件中。如果您想在运行时产生光源并且让他自动具有光照函数那么这是有用的。您也可以通过在虚幻编辑器中使用光照函数创建一个光源设置的原型来实现这个处理。

EmbeddedLightFunctionLight.uc
class EmbeddedLightFunctionLight extends PointLightMovable;defaultproperties
{// Create the light function in scriptBegin Object Class=LightFunction Name=MyLightFunctionSourceMaterial=Material'LightFunctionAssets.SimpleFlickeringLightFunction'End Object// Attach the light function to the light componentBegin Object Name=PointLightComponent0Function=MyLightFunctionEnd ObjectbNoDelete=false
}

一旦您编译这个脚本后,那么您便可以在内容浏览器中的Actor类别浏览器中找到这个光源。

LightFunctionsFindingEmbeddedLightFunctionLight.jpg

将光照函数添加到动态地创建的光源上

光照函数可以添加到关卡中现有的光源上,也可以添加到在游戏过程中产生的光源上。唯一的不足是光照函数将它们的材质引用声明为常量,所以目前没有办法使用UnrealScript修改它。由于这个原因,您将需要在虚幻编辑器中将光照函数创建为原型。然后您可以基于该原型生成一个新的光照函数,然后将它在运行时分配给光源组件。

RunTimeLightFunctionLight
class RunTimeLightFunctionLight extends PointLightMovable;var(Light) const archetype LightFunction LightFunctionArchetype;function PostBeginPlay()
{local PointLightComponent PointLightComponent;local LightFunction LightFunction;Super.PostBeginPlay();PointLightComponent = PointLightComponent(LightComponent);if (PointLightComponent != None){if (LightFunctionArchetype != None && LightComponent.Function == None){LightFunction = new () LightFunctionArchetype.Class(LightFunctionArchetype);if (LightFunction != None){LightComponent.SetLightProperties(,, LightFunction);}}PointLightComponent.UpdateColorAndBrightness();}
}defaultproperties
{bNoDelete=false
}

要想创建光照函数原型,那么请跳转到内容浏览器中的Actor类别浏览器部分。搜索LightFunction,右击它并点击"Create Archetype"。

0_LightFunctionCreateLFArchetype.jpg

将会弹出一个窗口,这里您可以设置将要保存原型的地方。针对RunTimeLightFunctionLight 类重复这个过程。

1_LightFunctionSetLFLocation.jpg

返回到内容浏览器,并双击您的RunTimeLightFunctionLight 类。使用您先前创建的光照函数原型设置LightFunctionArchetype 属性域。

2_LightFunctionCustomizeLightArchetype.jpg

这是个可以在原型中生成的Kismet序列。这样设置是为了生成RunTimeLightFunctionLight 原型。

3_LightFunctionKismet.jpg

相关主题


  • 使用光照函数 - 向您展示了如何使用各种光照函数的开发工具包精华文档。

下载


  • 下载Unrealscript光照函数指南所使用的内容。

UE3 Light Functions (光照函数)相关推荐

  1. UE4 Light Functions(光源函数)

    概述 Light Functions(光源函数) 从本质上讲是一种可以应用到光源上的材质,应用起来和投影仪或光源凝胶类似.通过使用虚幻引擎材质编辑器的强大功能,光源函数可以塑造光源形状.创建有趣的阴影 ...

  2. Python:实现scoring functions评分函数算法(附完整源码)

    Python:实现scoring functions评分函数算法 import numpy as np# Mean Absolute Error def mae(predict, actual):pr ...

  3. Python:实现word frequency functions词频函数算法(附完整源码)

    Python:实现word frequency functions词频函数算法 import string from math import log10 def term_frequency(term ...

  4. ES6学习笔记二arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  5. MySQL Functions 常用函数汇总

    Aggregate Functions (聚合函数) numeric functions round(5.73,1) -- 保留一位小数,做四舍五入结果5.7 truncate(5.6789,2) - ...

  6. unity 镜面反射_Unity | Diffuse Light漫反射光照

    Hello all 今天跟大家唠一下unity shader中的diffuse 是我木偶心没 我们在游戏开发的过程中光照是必不可少的,而为了使游戏更加真实,获得更好的体验,也会模拟因光照产生的各种镜面 ...

  7. Numpy Mathematical functions 数学函数

    https://docs.scipy.org/doc/numpy/reference/routines.math.html Trigonometric functions(三角函数) 函数 描述 si ...

  8. R语言笔记7:functions——编写函数所需的基础知识

    上一讲通过三个简单的例子体验了一下如何在R中写函数,下面来详细学习有关R语言中函数的知识. Functions in R 主要分三个部分来讲解函数: 编写函数所需的基础知识 相关语法作用域 R语言作用 ...

  9. leetcode 636. Exclusive Time of Functions | 636. 函数的独占时间(Stack)

    题目 https://leetcode.com/problems/exclusive-time-of-functions/ 题解 类似于括号匹配问题,遍历 list,每一次来到新元素时,结算当前正在执 ...

最新文章

  1. python爬取有道词典_利用Python3和Charles爬取有道词典,生成翻译exe单文件
  2. 跟踪Makefile输出调试信息
  3. java对字符处理(一)--对HTML中字符转换
  4. ajax 接收json数据的进一步了解
  5. c#中connect函数_C#.NET 各种连接字符串
  6. 漫步数学分析四——集合内部
  7. 工业机器人九龙坡区职教中心_2020年度机械行业职业教育技能大赛“汇博杯”精密模具智能制造综合技术应用赛项于重庆工业职业技术学院正式闭幕...
  8. 44个基于SaaS的商业智能解决方案
  9. CCD与CMOS的区别
  10. 启动开源项目 XDD
  11. Mac After Effects安装BodyMovin说明文档
  12. PDF文件转换成图片的格式
  13. 2022-2028中国智能窃听检测系统市场现状研究分析与发展前景预测报告
  14. vmware中linux连接不上wifi
  15. redis的发布订阅缺陷
  16. Android开发——使用ActivityLifecycleCallbacks监控App是否处于后台
  17. 计算机实训项目一操作系统和网络应用,计算机网络实训心得
  18. NET连接mysql字符串
  19. linux命令详解及软件安装(全)
  20. 如何编写测试用例?(详细分析)

热门文章

  1. android分屏模式_浅谈 Android 7.0 多窗口分屏模式的实现
  2. java的三大特征详解
  3. easyui 控制某列显示不显示_baogaiMCU控制OLED显示屏
  4. matlab 图像读取长宽_计算机视觉学习笔记1 图像读取显示和尺寸变换
  5. 笔记本windows7设置WIFI教程(超详细)
  6. python开发环境有哪些_python编程需要什么环境
  7. php mysql csv_php导入csv到mysql数据库
  8. ‘dict’ object has no attribute 'has_key'
  9. Vue的常用指令有哪些,分别是什么作用?
  10. Spring Boot基础学习笔记19:自定义RedisTemplate与RedisCacheManager