今天这个槽我一定要吐

作为cocos3D游戏引擎的先锋使用者,我有一个天大的槽点今天要吐出来。那就是在Canvas节点下的3D模型受不到光照!!!
众所周知,cocos3D提供了直接把3D模型混入UI布局里的方法,那就是在有3D模型的节点上加上一个ModelComponent组件,就可以在UI里显示了。比如下图

但是有一个重要的槽点就是模型导入进去后会变暗。引擎组的回复是Canvas下的模型无法收到平行光。所以建议材质换成Unlit哦,也就无光照,在我看来,这个办法有众多槽点。

1.美术从3D Max里导出的模型FBX文件导入到游戏里的材质默认都是standard的。如果我希望将模型放入到UI层级里,必须先把所有的材质都dump出来,然后改成unlit。倒是每个材质改成unlit之后的上边的MainColor啊都是要重新设置的,比如说我有30把枪,每个枪上都好几个材质,那兼职是要了我的老命。毕竟美术都在3D Max里各个东西都设置好了。我再重新换一个Unlit,简直是做重复功。

2。.如果模型没有光照的话,会非常的奇怪,做一个简单的比方,我一个Cube是红色的,有光照的情况下,我可以看出来面与面的分界。更有立体感。而没有光照的话,眼睛根本看不出来这是个cube。因为你的眼里只有一片红色。

3、我一个枪可能在选枪的时候放到UI里,在游戏的时候就在3D场景里。难道我需要做2个预制件,一个专门无光照给UI里用,一个正常的在游戏场景里用吗。

所以我强烈希望引擎组能修改这个一个机制,让Canvas下的模型也能受到光照。解决我心中的痛点。

PS。我截图里的模型是用 Camera对着一个3D模型,然后转化到2D的精灵上实现的,所以其实是有光照的。

1赞

其实还是有办法解决的,首先是模型不要用多个材质球,简单展uv后填色(用贴图表现颜色),3D软件一般可以直接烘材质颜色到一张贴图上。光照可以尝试自己写一个模拟光shader(官方能出个demo就好了),这样不依赖场景的灯光。选择枪的预制件问题,可以动态替换shader和添加脚本。

其实只要 官方能在 standed-shader里 把当前场景的平行光直接传入就好了,非常简单的事情。不知道是不是实现起来有特别的难度还是咋地

可以考虑单独弄一个camera,只照着这个枪,然后ClearFlags选SOLID_COLOR,把刷新的颜色改为0000。然后这个camera在targetTexture绑定到2d层的一个精灵上。大概这样。

现在的截图方案就是样子做的。但是如果说我有一个枪支列表,里边有 30把枪。如果直接把枪支模型节点放到UI层里会方便许多。你总不能让我弄30个照相机来照着吧。哈哈哈哈哈

放一排挪照相机也不是不行~哈哈哈,手动狗头

肯定还是支持了更好,毕竟这种方案需要渲染到纹理

感谢吐槽,我们目前从管线设计上对 UI 做了很多的隔离和限制,主要是为了让 UI 管线可以更简单高效。目前正在做渲染管线的重构,会整体考虑需求做出权衡

是啊 问题多多

用RenderTexture做混合呀

1赞

怎么做混合呢?我也遇到这个问题了~