即使模型使用unlit, 也没法还原贴图颜色?

1728379496409
f5cb9934310bcc1d2a696f6d70f81d1

猜一猜对方需要还原什么效果
逼得一个美术岗位, 分离出普通3d美术和cocos3d美术 :rofl:

image

其实只是个很简单的上车游戏
首先原画先把最终效果画好(下图)
然后3d美术尽可能的还原(上图)
但是就是还原不出来

1728379634130

情愿花钱也想解决的问题, 估计也死了不少脑细胞 :rofl:


最初我以为是灯光被乱调, 导致颜色对不上
后来项目发我看了一下, 全是unlit的材质, 灯光删了也没区别
不过小游戏, 这样也合理啊, 挺专业的
但是这样就只能调整贴图颜色了吧
这些粗活我就嫌弃了, 不过可以先试一个

我秉承’过程对等就是结果对等’的原则, 拿着截图放进ps调整了一下
嗯嗯, 亮度55, 对比度100, 差不多了

然后挑了几张贴图, 反手就是一个复制粘贴合并保存
预期着贴图刷新之后, 渲染结果就是和我调整的截图一样
毕竟unlit嘛, 既然灯光啥的干扰因素都没有, 那只能输出贴图颜色了对吧
“这个美术真菜, 贴图颜色都调不好”

然而, 替换贴图之后没有达到预期的效果
我觉得事情并没有如此简单
虽然我一直都觉得cocos输出的颜色有点怪怪的
但是从来没怀疑过是unlit会有问题
毕竟unlit嘛, 只能输出贴图颜色对吧?


于是我创建了一张纯红色的贴图

image

发现渲染结果居然不是纯红色(255,0,0)的 !!
我关注点转移到shader上

拷贝了一下unlit.effect, 直接 return o;
发现还是不能还原, 出来的整个图都变暗了
这什么鬼啊, 气死我了

这时候再次秉承’过程对等就是结果对等’的原则
将输出的结果截图放到ps上对比
发现色阶可以有效的抵消变暗的效果
再问问gpt, ps的色阶是怎么实现的啊?

再经过优化之后, 就是一句, 没错就是一句

1537158583ead1a475d94d4709b1279

最终效果对比一下, 留意右下角的灰度渐变

整个效果就还原了
而且还是截图取色器都能100%还原那种


这时候我发现, 水面的贴图是蓝色的啊

image

再回头对比一下, 原画的水面是天蓝色的
这中间都经历了什么? 我们可以想象一下

image

3d美术做了一个天蓝色的贴图
但是放进cocos之后, 显示了另一种蓝色(估计是更浅的蓝色)
为了修正这个问题, 美术把一张天蓝色的贴图改成蓝色
最后将这张蓝色放回cocos中, 最终显示天蓝色的样子(但是还是有点灰蒙蒙的感觉)
这是什么乱七八糟的逻辑 :upside_down_face:


最后是装逼时间

image
image


可以看到
可见即可得的工作流, 对于美术人员来说是多么重要

反过来说
中间多了一层不可预知的变化, 能把美术吓得分裂
也许下次听到cocos的3d项目, 就让对方另找高人了吧


至于引擎组是出于何种原因, 最终让unlit输出的颜色发生了变化, 我不得而知
甚至版本都发行到3.8了, 还保留着这个效果
而我粗暴的抛弃了CCFragOutput(o)的方案, 会不会导致其他的问题, 也没有测试
只测了web, pc和安卓浏览器都是正常的


(CCFragOutput的调用链, 基本上全是兼容不同的颜色格式)

但是我觉得, 一个产品, 应该尽量减少这种变化, 才会更好用, 才会更多人愿意用
而业余的人员也能够参与使用, 输出成果, 更是这个产品的生命力的一种象征


  • 这里是二次编辑

经过排查, 造成色偏的原因, 是因为场景勾选了HDR, 而不是LDR

我也不知道是开项目默认HDR还是美术自己勾选的
由于我没怎么使用过这个模块, 所以完全没有注意

勾选LDR的情况下, 内置unlit即可还原贴图的颜色
而勾选HDR的情况下, 颜色最终会发生偏差
而刚好pow(0.5)是逆向运算, 算是误打误撞的解决了问题

至于unlit这个概念, 就是无光照而已
也没有表达不包含其他渲染效果, 比如全局雾也是有计算的
但是一直都觉得unlit只是一个搬运贴图的shader
就没觉得HDR和LDR会干预到它 :joy:

是不是这个原因:

引擎默认开启了hdr高饱和度,你在编辑器里选择ldr估计就是还原原图颜色了,设置方案看楼上帖子:slight_smile::joy:

1赞

这个高饱和的作用是什么呢? 刚开始使用的时候 . 也是被这个颜色失真的问题困扰了很久… 难受坏了~ :sob:

hdr 画面更鲜艳,暗的更暗亮的更亮,手机相机你开启hdr和关闭画面对比感受一下

应该是scene设置的问题,你不发这个,我也没注意这个问题

所以有问题可以来论坛发帖讨论讨论,自己蒙头苦干最后发现原来是自己用错了或者设计如此 :joy:

挺好,自己动手解决问题了。

我看了一下, 确实是这样, 因为项目是临时接过来的, 倒是忘了看这里, 算是歪打正着 :rofl:

调试颜色, 改shader才半小时, 来论坛写帖子一小时(怪我太啰嗦了 :upside_down_face:)