【问题标题】:How do I Blend Colours like This?我如何混合这样的颜色?
【发布时间】:2012-04-30 02:45:51
【问题描述】:

我正在编写一个工具来协助将新角色改装到游戏十字军之王 II 中,但我有点卡在头发和胡须的颜色上。

游戏以这样的纹理开始:


(来源:serayen.com

然后将其与三种颜色混合 - 阴影、底色和高光,例如:

  • 黑暗:10、10、10
  • 基数:125、85、56
  • 高亮:255、255、255

结果如下:


(来源:serayen.com

它使用哪种混合方式?我将如何在 C# 中执行此操作?

【问题讨论】:

  • 我猜我会说它正在执行颜色乘法,根据像素的整体强度选择三种颜色中的哪一种来乘以像素,可能使用三者之间的线性插值。除非您知道构成乘法的暗像素、基本像素或高光像素的阈值,否则您将很难正确复制。

标签: c# colors blending mixing


【解决方案1】:

决定将此作为完整的答案,因为它更易于格式化并在此处提供示例。

作为一种猜测,我会说它正在执行颜色乘法,根据像素的整体强度选择三种颜色中的哪一种来乘以像素,可能使用三者之间的线性插值。除非您知道构成用于乘法的暗像素、基本像素或高光像素的阈值,否则您将很难正确复制它。

所以我假设他们的算法是:

(pixel(x,y).color * dark.color * THRESHDARK - min(pixel(x,y).intensity, THRESHDARK) //dark blending + 
(pixel(x,y).color * base.color * (pixel(x,y).intensity - THRESHDARK) / (THRESHLIGHT-THRESHDARK)) //middle blending +
(pixel(x,y).color * highlight.color * pixel(x,y).intensity - THRESHLIGHT) //light blending

或类似的东西。希望这会有所帮助。

【讨论】:

  • 如果该乘法与 Photoshop 的处理方式相似,那么它会比游戏最终的颜色要暗得多。另外,该示例中的像素强度是多少?我尝试在程序中实现它,但无法弄清楚它是什么。
  • 对不起,这更像是一个大概的猜测。正如我所说,由于权重等原因,很难完美地再现它们的值,但你可能会通过反复试验来接近。在该示例中,通过对该像素处的 r、g 和 b 分量的值进行平均来计算像素的强度。有一些更好的方法来获得像素强度,因为眼睛以不同的方式接收光,但简单的平均是一个好的开始
猜你喜欢
  • 2011-05-07
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2019-10-31
  • 2014-01-08
  • 2020-01-01
  • 1970-01-01
  • 2010-11-23
相关资源
最近更新 更多