天边洒下一道光

天边洒下一道光

更新时间 2021-01-19 17:11

天边洒下一道光分属于《极乐迪斯科》的开发日志

本页贡献者

五月
增2,699 改0 删0
冰糖给你吃
增1 改4 删0

基本信息

天边洒下一道光
原标题 SHEDDING LIGHT
原作者 Kuubass
原发表日期 2016年2月2日
原文链接 https://zaumstudio.com/2016/02/02/shedding-light

注:这是一篇技术向开发日志,其中含有较多专业术语,译者不是游戏开发专业人士,一些词汇翻译很可能存在错误,希望有这方面专业知识的人能提供准确的译法,共同翻好这篇日志,QQ群 993272151

大家好。
我是这个项目的技术美术师,前来跟大家聊聊一点技术方面的东西。

  1. 室内光照系统 Interior lighting system
  2. 输入反正切(arctangent)编码
  3. 光照区域贴图 Lightfield map
  4. 可交互物品高亮

室内光照系统 Interior lighting system

M98y2gg

先总结,这个场景没有用引擎内置光源。所有光照根据以下计算:

  • RGB中性渲染(neutral render)背景图加手工修饰
  • 黑白阴影/光照复合贴图(shade/light multiplier map)编码进反照率贴图(albedo map)的alpha通道
  • RGB光照方向贴图
  • 全局各时刻日光/阴影颜色变量

叠加阴影贴图(Additive shade map)无法胜任是因为它在黑暗区域容易反转颜色信息(事后想来还挺显而易见的,哈)。把叠加阴影贴图转为黑白后会得到超级浓黑的黑暗区域(事后想来还挺显而易见的,哈)。积性光/影贴图(Multiplicative light/shade map)看起来效果不错,如果不是PNG格式的0-1限制局限的花,不过PNG格式图片0到1色彩限制有点问题。我们先不说迷你浮点(Minifloat)或EXR格式(译注:一种高动态范围图像格式)。

输入反正切(arctangent)编码

输入一个0到无限的值进行arctan()运算,把这个数字转为0-1范围内的值。将贴图放进引擎,然后进行快速的tan()运算,之后再将之叠加到贴图上。这样能获得接近0的高精度,并且误差小到人眼无法辨识的程度。

光照区域贴图 Lightfield map

5GTSYGd

这张(手绘的)贴图有每束光线照射到2D场景中每个点的方向和角度,技术上讲,这是一个光照区域所需信息的最最简单版本,模糊、高效、足够好的描述了自然光从哪个方向照过来。这一技术依靠的是光照条件变化低频且近似,而且层次位于物体和人物之下。

白色的光团是alpha通道,我们用来映射出人造非直接照明,靠近窗户的地方alpha值较低,形成强直射光线,所形成的暗部/阴影( shades/shadows)也会更强;alpha值高的地方意味着光线经过多次的反射,所以着色器会在物体周围绘制更多的光,并使暗部/阴影浅一些。

可交互物品高亮

pncnDOx

我们通过测试证实,法线-拉伸描边无论实现方式还是效果都不够讲究。现在我们用着色器替换(shader replacement)来渲染出一个渲染纹理(RenderTexture)遮罩用来测定物体边缘。随后给轮廓描边就没这么麻烦了,最终效果比我见过的任何基于几何图解(geometry-based)方案都可靠,效果也更好(边缘测定还自带抗锯齿效果,耶)。这是一个非常直白的解决方法,不过上色方式就比较有说的了,这个月内会发一篇日志来说这个的。