tuyoogame / YooAsset

unity3d resources management system
https://www.yooasset.com/
Apache License 2.0
2.38k stars 467 forks source link

打包后部分内容无法正常渲染 #192

Open RouderSky opened 10 months ago

RouderSky commented 10 months ago

我有一个prefab,参与打包,prefab里有一个GO,GO上有一个Terrain组件,Terrain组件中用到一个材质TerrainMat,材质TerrainMat使用CusTerrainLit shader 打包后,我打印log来看,材质是存在的,但是地形完全透明,看不到 我可以确定地形是被正确创建了,因为碰撞体存在 在editor下是正常的

unity版本是2021.3.30f1

RouderSky commented 10 months ago

我看了下,变体收集没有收集到材质TerrainMat 是不是没有收集到的变体就一定没有被打包?

RouderSky commented 10 months ago

我发现把这个prefab拉到被打包的场景中可以收集到变体,这是为啥 但是打包后,这个场景还是看不到这个地形

gmhevinci commented 10 months ago

https://www.yooasset.com/docs/FAQ#%E9%97%AE%E9%A2%98%E7%9C%9F%E6%9C%BA%E4%B8%8A%E7%9A%84%E6%A8%A1%E5%9E%8B%E6%88%96%E6%9D%90%E8%B4%A8%E7%90%83%E6%98%BE%E7%A4%BA%E6%95%88%E6%9E%9C%E4%B8%8D%E5%AF%B9

gmhevinci commented 10 months ago

你先参照常见问题来解决

RouderSky commented 10 months ago

找到凶手了,开了Terrain的Draw Instance打包后就没法显示

你先参照常见问题来解决

gmhevinci commented 10 months ago

该issue可以长期开着

RouderSky commented 10 months ago

还是有问题,打包后,地形是能看到了,但是地形上的法线效果没有了 我看layer中引用的normal图还在的,就是没效果,估计还是shader问题

gmhevinci commented 10 months ago

看下变种是不是没有收集到。

RouderSky commented 10 months ago

收集到了,材质也在,shader也在、纹理也在,就是渲染效果不对,很迷

gmhevinci commented 10 months ago

问题:真机上的模型或材质球显示效果不对 确认是否收集过着色器变种,并且SVC文件参与打包。 尝试关闭Project Settings -> Player页面 Optimization栏的Optimize Mesh Data选项。 如果Unity3D是2020.3以上的版本,尝试使用SBP构建(可编程构建管线)。 确认着色器使用特性被测试真机硬件支持。 确认渲染组件代码未被引擎裁剪。 如果是粒子特效显示问题,请检测关联Mesh是否开启了可读写。 如果是光照贴图错误,请检测相关设置。 从错误日志或警告日志里找到蛛丝马迹。

gmhevinci commented 10 months ago

尝试关闭Project Settings -> Player页面 Optimization栏的Optimize Mesh Data选项。 是不是顶点数据被优化掉了。可以关闭下

RouderSky commented 10 months ago

image

唯一能怀疑的只有 确认着色器使用特性被测试真机硬件支持。 确认渲染组件代码未被引擎裁剪。

RouderSky commented 10 months ago

我在首包场景放了一个一模一样的terrain,打包出来法线效果是对的 也就是说是yooasset打包的场景有问题

RouderSky commented 10 months ago

我可以提供最小复现场景

RouderSky commented 10 months ago

image 这样配置应该没问题吧

gmhevinci commented 10 months ago

我可以提供最小复现场景

进QQ群

RouderSky commented 10 months ago

我做了下面测试:

  1. 我在首包场景的一个mono脚本中挂了地形的材质,进游戏后用这个材质替换。法线效果还是没有
  2. 我在首包场景的放了一个地形,进游戏后用这个地形的材质来替换。法线效果就有了

也就是说目前只有将地形直接放到首包场景进行打包的效果才是对的

所以我目前暂时先用2方案拿到正确的材质,进到游戏场景之后将游戏场景中的地形材质都替换掉,这样打包后就能看到法线效果了

rayss1 commented 8 months ago

我也遇到了地形渲染不出来的bug 请问解决了么

rayss1 commented 8 months ago

找到凶手了,开了Terrain的Draw Instance打包后就没法显示

你先参照常见问题来解决

Draw Instance 关了之后确实就可以了,这是Unity的Bug还是YooAssets的?

rayss1 commented 7 months ago

應該是YooAsset 1.5.7 的Bug,換成Addressable之後問題就解決了

gmhevinci commented 7 months ago

應該是YooAsset 1.5.7 的Bug,換成Addressable之後問題就解決了

你把材质球和模型打包到一起,试一试。

RouderSky commented 7 months ago

在做变体收集时,会自动创建一个场景,那个场景有什么用的

gmhevinci commented 7 months ago

在做变体收集时,会自动创建一个场景,那个场景有什么用的

常见是用来做照射用的,里面会有一个主相机和一个方向光。

rayss1 commented 6 months ago

應該是YooAsset 1.5.7 的Bug,換成Addressable之後問題就解決了

你把材质球和模型打包到一起,试一试。

试过了 地形还是无法显示

rayss1 commented 6 months ago

提供一个最小示例工程,打开后在编辑器下 所有地形都能加载正确渲染;打包后勾选了draw instanced的Terrain都渲染不出来 下载之后把z01, z02, z03的.zip删掉

TestYooAsset.z01.zip TestYooAsset.z02.zip TestYooAsset.z03.zip TestYooAsset.zip

RouderSky commented 6 months ago

同样的问题在text mesh pro中也遇到了,打包后字体很小的情况下,底部是灰的渲染效果不对 我的文本UI明明参与了打包,但是感觉变体收集不对 我还是通过老办法解决,把文本UI挂到首场景,然unity自己打包收集,进游戏后 用 首场景的文本UI中的字体文件 替换 所有的文本UI的字体文件

SidneyZhou commented 6 months ago

@RouderSky @gmhevinci 我在 windows 平台上也复现了该问题,在Editor上加载bundle无法显示地面,如果选中 Terrain,重新应用 Shader 可以恢复。感觉是打包后 Shader 的引用丢失了? image image

gmhevinci commented 5 months ago

在unity2021.3.32f1版本里,我复现了该问题。纯手工打包并没有使用YOOAsset。

 AssetBundleBuild[] assetBundleBuilds = new AssetBundleBuild[3];

        assetBundleBuilds[0] = new AssetBundleBuild();
        assetBundleBuilds[0].assetBundleName = "scene.ab";
        assetBundleBuilds[0].assetNames = new string[] { "Assets/Scene/Grass.unity" };

        assetBundleBuilds[1] = new AssetBundleBuild();
        assetBundleBuilds[1].assetBundleName = "mat.ab";
        assetBundleBuilds[1].assetNames = new string[] { "Assets/Matrial/instance.mat" };

        assetBundleBuilds[2] = new AssetBundleBuild();
        assetBundleBuilds[2].assetBundleName = "shader.ab";
        assetBundleBuilds[2].assetNames = new string[] { "Assets/Shaders/InstanceShader.shader", "Assets/Shaders/InstanceShaderSVC.shadervariants" };

以上构建结构,如果使用内置构建管线后会出现DrawInstance失效的问题。查看shader.ab文件观察到SVC文件里缺少Instance变种,其实我们的SVC文件里配置的对应的变种。

然后修改构建管线为SBP,一切恢复了正常。猜测是内置构建管线的BUG。 所以在unity2021版本开始,推荐使用SBP构建管线。

gmhevinci commented 1 month ago

unity2022.3 lts版本里,地形法线如果失效,可以尝试把YOO在资源收集界面的auto collect shader选项关闭。