色彩校正
- 有关实现色彩校正的实体,请参阅color_correction、color_correction_volume和 fog_volume。
色彩校正是指调整图像的色彩平衡以实现预期效果的概念。它主要用于设定情感色调或传达重要信息。
- 通过向蓝色或灰色倾斜,可以营造寒冷或孤立的感觉(例如, 《少数派报告》)。
- 更亮、更饱和的颜色如红色或黄色会产生相反的效果,增强情感( 《英雄》)。
- 色彩校正还可以帮助复制其他媒介的效果( 《罪恶之城》)。
游戏中的色彩校正具有独特的动态效果。它可以反映世界或玩家的状态,或者与特定位置或物体关联。
使用色彩校正
Source将色彩校正配置文件存储在“查找表”中,这些表是大小为96KB的二进制文件,扩展名为.raw
。通常,使用一套游戏内工具来创建这些文件,并通过color_correction(点实体 ,带衰减)和color_correction_volume(刷子实体 )将其添加到地图中。色彩校正非常cheap 。
要在您的地图中使用色彩校正,创建至少一个color_correction或color_correction_volume实体。如果使用color_correction
,请禁用衰减。必须靠近实体才能看到校正效果。如果您打算创建自己的色彩校正,请不要为实体指定查找表。在 求生之路之前的游戏中,您可能需要确保在视频选项 > 高级中启用色彩校正(或设置mat_colorcorrection 1
)。
有多种方法可以创建色彩查找表。最初也是最常见的方法是通过游戏内的colorcorrectionui
。其他方法涉及使用Photoshop或Paint.NET导入和导出.raw
文件。以下列出了这些方法。
使用colorcorrectionui
创建色彩校正
要使用colorcorrectionui
:
- 如果您正在进行多人游戏,请启用
sv_cheats
。 - 在控制台中输入
colorcorrectionui
。
在出现的窗口中,校正滤镜可以通过以下方式进行管理:
- 在层窗口底部的按钮中创建和管理。
- 通过点击其圆形图标启用或禁用。
- 使用混合滑块调整强度。
- 使用Alt + 双击复制。
窗口中还有一个层窗口用于管理滤镜,以及一个'查找视图'用于预览它们在一组彩色像素上的效果。
滤镜
- 曲线 - 搜索教程
- 与图像编辑器中的曲线工具完全相同。横轴表示原始图像中的色值;纵轴表示最终图像中的亮度。点击并拖动线条进行操作。黑色位于左下角,白色位于右上角。
- 错误:无法删除点。 [todo tested in?]
- 错误:只有当光标位于图表区域内时,释放拖动才会被记录下来。这使得将点放置在边缘附近变得困难。 [todo tested in?]
- 色阶 - 搜索教程
- 同样,这个滤镜与图像编辑器中的色阶工具直接对应。两个滑块控制图像中色彩的范围:上面的滑块将范围外的值剪切为纯黑(左)或纯白(右),而下面的滑块将图像的范围压缩以适应它。上滑块的中间指示器权衡图像的范围(即调整伽马)。
- 错误:如果两个指示器重叠,分开它们几乎不可能。 [todo tested in?]
- 选定的HSV
- 这是最复杂的滤镜。图像是当前场景的实时缩略图,当前选定的颜色以红色突出显示。点击可以选择一个颜色,或按下选择按钮直接从场景中选择颜色(之后按Esc)。按住Ctrl可以在这两种情况下选择多个颜色。
- 容差和模糊度可以调整选择;色相、饱和度和亮度(即HSV)可以应用效果。色彩化会使色相滑块替换而不是调整。
- 提示:下拉菜单中包含许多不同的算法,并非所有都需要点击来选择颜色。
- 错误:有几种情况,预览缩略图可能会锁死。唯一已知的解决方法是重新启动引擎。 [todo tested in?]
- 查找
- 加载一个现有的查找表。
- 错误:文件夹视图从底层游戏的根目录开始,而不是当前的mod。 [todo tested in?]
- 平衡 - 搜索教程
- 另一个与桌面工具相同的工具。它根据场景中的明亮、中等和/或暗区域调整色彩通道的偏移。
使用Photoshop创建色彩校正
Photoshop能够导入和导出.raw
文件。这意味着您可以导入一个色彩查找表,在Photoshop中进行调整,然后导出用于游戏中。这对于您在使用游戏内工具时遇到问题,或者如果您更喜欢在Photoshop中进行调整时,可能会更为方便。
您可以按照以下步骤在Photoshop中创建新的色彩查找表:
- 在游戏中禁用色彩校正,可以通过使用
colorcorrectionui
或在控制台中输入mat_colorcorrection 0
来完成。 - 截取一张您想要作为参考的地图截图。
- 在Photoshop中打开截图。
- 导入一个默认的查找表到Photoshop。在 求生之路2中,可以在文件中找到
materials/correction/off.raw
。 - 如果Photoshop提示导入选项,使用:宽度32像素,高度1024像素,3个通道,交错,8位,0个头部大小。
- 将查找表直接复制到您的截图上。
- 对截图进行调整,直到获得所需的效果。确保这些调整的图层位于截图和查找表的上方。
- 隐藏截图层,将所有层合并为一层,然后将调整后的查找表复制回导入的文件中。
- 将查找表导出为一个新的
.raw
文件,并命名为新名称。
现在,您应该能够在您的color_correction
或color_correction_volume
实体中使用该色彩查找表。您可以通过使用colorcorrectionui
或在控制台中输入mat_colorcorrection 1
来重新启用色彩校正。
使用Paint.NET创建色彩校正
默认情况下,Paint.NET无法像Photoshop那样导入或导出.raw
文件。本教程使用了一个社区插件,该插件特别添加了用于创建色彩校正的能力。要安装它,请访问Paint.NET Source Engine RAW插件并下载最新版本的.dll
。然后,将其放置在Program Files\paint.net\FileTypes
目录中。
安装完成后,您可以按照以下步骤在Paint.NET中创建新的色彩查找表:
- 在游戏中禁用色彩校正,可以通过使用
colorcorrectionui
或在控制台中输入mat_colorcorrection 0
来完成。 - 截取一张您想要作为参考的地图截图。
- 在Paint.NET中打开截图。
- 导入一个默认的查找表到Paint.NET。在 求生之路2中,可以在文件中找到
materials/correction/off.raw
。您还可以下载并使用本节右上角的图像。 - 将查找表直接复制到截图的左上角。
- 对截图进行调整,直到获得所需的效果。
- 将查找表导出为一个新的
.raw
文件,并命名为新名称。在保存时,确保禁用"允许任何分辨率"选项。
现在,您应该能够在您的color_correction
或color_correction_volume
实体中使用该色彩查找表。您可以通过使用colorcorrectionui
或在控制台中输入mat_colorcorrection 1
来重新启用色彩校正。
控制台命令
colorcorrectionui
mat_colcorrection_disableentities 0/1
mat_colorcorrection 0/1
sv_allow_color_correction 0/1
(允许或禁止客户端在该服务器上使用色彩校正)
色彩强度修正
在某些情况下,您创建的.raw
文件在游戏中加载时可能会比在编辑器中创建时显得更为强烈。这是由于客户端色彩校正代码的问题,导致权重被应用了两次。以下是一些可能的解决方法:
如果您正在一个现有的游戏中工作,或者无法编写自己的代码,那么您可以简单地将色彩校正.raw
文件的强度减半。最简单的方法是在色彩校正工具中保存.raw
文件之前,先将每个滤镜的'Blend'值减半。或者,您也可以在Photoshop中进行修正:
- 创建一个中性
.raw
文件(即删除所有.raw
文件,打开您的地图,打开色彩校正UI,点击保存,但不创建任何滤镜) - 创建您想要的色彩校正并保存。
- 在Photoshop中打开两个.raw文件,将您的
.raw
文件粘贴到中性文件上,设置色彩校正图层的不透明度为50%,然后将其保存为具有适当文件名的RAW文件(即您的地图将查找的文件名)
- 注意:如果Photoshop提示导入选项,请使用:宽度32像素,高度1024像素,3个通道,交错,8位,0个头部大小。
您也可以使用代码修复它。这样更为理想,因为只需要做一次修改,就能修复后续所有的色彩校正,而不需要每次保存时都调整每个.raw文件。但这是一个权衡,修正后的结果并非100%相同,但非常接近。最简单的方法是调整color_correction
和color_correction_volume
实体应用的权重:
在client/c_colorcorrection.cpp
的第140行,将
g_pColorCorrectionMgr->SetColorCorrectionWeight( m_CCHandle, m_flCurWeight * ( 1.0 - weight ) );
修改为
g_pColorCorrectionMgr->SetColorCorrectionWeight( m_CCHandle, (m_flCurWeight * ( 1.0 - weight )) * 0.675f );
然后在client/c_colorcorrectionvolume.cpp
的第105行,将
g_pColorCorrectionMgr->SetColorCorrectionWeight( m_CCHandle, m_Weight );
修改为
g_pColorCorrectionMgr->SetColorCorrectionWeight( m_CCHandle, m_Weight * 0.675f );
一个更好但更复杂的解决方法是找到并解决CColorCorrectionMgr::SetColorCorrectionWeight()
被调用两次且中间没有重置的原因,并设计一个替代方案。如果您想调查此问题,最好的第一步是阅读client/colorcorrectionmgr.cpp
第77行的注释。
- 注意:如果您已经使用非代码方法减半了现有的
.raw
文件的强度,请不要忘记回去并将它们的强度加倍!
修复sv_pure
服务器上的色彩校正
有时,色彩校正可能无法在sv_pure
服务器上正常工作。
将以下代码添加到您的白名单中:
whitelist { //MATERIALS materials\colorcorrection\correction_file_name_here.raw from_steam //指向单个文件 materials\colorcorrection\*.* from_steam //允许在此服务器上使用自定义色彩校正。 }
RAW文件格式
该文件作为RGB值的查找表。每个条目是一个3字节的RGB值,第一个字节为红色值。该表是三维的32x32x32,使用RGB值作为坐标查找输出的RGB值。每个条目的后续条目表示R字节值增加4(因为256个强度除以32个条目等于4的步长)。在R值为256的条目处,值会回绕到零,并将G字节增加4。同样,绿色值在256时回绕,并将B字节增加4。条目的索引可以通过以下公式计算,其中R、G和B是从0到255的整数值。
//注意使用整数除法,任何小数值会在下一次操作前被截断 int EntryIndex = (R / 4) + ((G / 4) + (B / 4) * 32) * 32
在游戏中使用时,来自32x32x32表的值会被插值到适应256x256x256色彩空间。