Project1

标题: 屏幕色调算法和2000之类的老RM不一样了 [打印本页]

作者: utunnels    时间: 2024-10-16 23:21
标题: 屏幕色调算法和2000之类的老RM不一样了
本帖最后由 utunnels 于 2024-10-16 23:25 编辑

因为我基本不使用这个功能所以没注意。
几天看到别的论坛有人吐槽这个问题,说RM2k上的色调和MV上的很不一样。
我还专门去看了下,那个红绿蓝的滑动条看起来是一样,不过2K的是百分比,从0%-200%,中间值是100%,MV的是-255~255,中间值是0。
虽然两个版本进度条拉到头都是一样的,但是在中间的时候区别就大了,比如MV如果红绿蓝全+128,遇到浅色比较多的情况,可能整个屏幕都白了。
但是因为2k是百分比,所以进度条拉到对应的位置(150%),并没有出现浅色全变白的情况。

这是MV的情况,好像核爆瞬间


这是模拟的RM2K的效果,好像白雾


简单来说,MV的色调改变就是数值直接相加,但是2K是按比例增加,比如150%就相当于在上面覆盖一个半透明的亮屏,50%就相当于覆盖一个半透明的黑屏。
模拟代码如下:
  1. ToneFilter.prototype.adjustTone = function(r, g, b) {
  2.     r = (r || 0).clamp(-255, 255) / 255;
  3.     g = (g || 0).clamp(-255, 255) / 255;
  4.     b = (b || 0).clamp(-255, 255) / 255;


  5.     var R=1,G=1,B=1;
  6.     //rm 2k tint
  7.     R = r<0?(1+r):(1-r);
  8.     r = r<0?0:r;
  9.     G = g<0?(1+g):(1-g);
  10.     g = g<0?0:g;
  11.     B = b<0?(1+b):(1-b);
  12.     b = b<0?0:b;


  13.     if (r !== 0 || g !== 0 || b !== 0||R !== 1 || G !== 1 || B !== 1) {
  14.         var matrix = [
  15.             R, 0, 0, r,  0,
  16.             0, G, 0, g, 0,
  17.             0, 0, B, b, 0,
  18.             0, 0, 0, 1, 0
  19.         ];


  20.         this._loadMatrix(matrix, true);
  21.     }
  22. };
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1