Solution Database - 解决方案仓库
- vs2017的fbxsdk的cmakelist配置说明
- glsl的语法高亮
- MSB6006 cmd.exe exit 1
- 骨骼动画动作幅度过大
- 骨骼动画的模型空间和世界空间转换问题
- 同一段代码,画一个模型的时候很正常,画另一个的时候出现很多三角形空洞,还有奇奇怪怪的线
- 在传uniform数组的时候遇到编译错误
- 模型失去了大部分的颜色和所有的贴图
- 在计算切线的时候,部分切线值是NAN导致模型出现黑色空洞
- OpenGL的各种库的依赖关系调整
- CEGUI的编译和样例运行方法
- 将CEGUI与OpenGL代码进行合并的方法
- 遇到一个特别奇怪的情况,CEGUI的窗口和按钮的图形被其他模型的图形覆盖了!
- 在添加了泛光效果之后CEGUI消失的问题
- 天空盒的问题(天空盒不显示、天空盒出现漏洞、模型走到天空盒外面、天空盒是个小立方体)
- 互相遮挡时阴影出现空洞
- 骨骼动画的过渡动画插值时的骨骼缩放问题
- 骨骼动画中的法线贴图问题
- 贴图出现网格样条纹或者贴图出现奇怪纹路完全不对的情况
- 骨骼重定向
- PBR渲染得到的画面过白的问题
- 关于添加音频
- Toggle的文字不显示
- onScroll事件无法穿透
- Unity 2018.4的VideoPlayer在安卓10上无法播放本地视频
- 美术资源复制到程序资源文件夹, prefab中引用丢失
- 一篇讲Unity音效基础的很好的资料
- [RuntimeNavMeshBuilder: Source mesh xxxxxxxxxxxxxxx does not allow read access]
- [Unity加载png文件为贴图]
- Unity IMGUI的TreeView怎么override KeyEvent获取Key
- [Maya在新场景中自动创建模型并导出为fbx文件]
- Unity编辑器报错
Dimensions of color surface does not match dimensions of depth surface
- Python里读取不同编码的文件
- 关于Unity的MenuItem的Priority的排列
- [UI画线]
Unreal Engine
UE4的pak资源导出方法
- 希望有效
OpenGL
vs2017的fbxsdk的cmakelist配置说明
- 每次重新加载项目都需要重新配置真的太麻烦了,所以折腾了一下cmakelist的配置
- 在
include_directories
下添加条目D:/Program\ Files/Autodesk/FBX/FBX\ SDK/2019.5/include/
(自己对一下fbx目录不要直接复制) - 增加条目
link_directories(D:/Program\ Files/Autodesk/FBX/FBX\ SDK/2019.5/lib/vs2017/x64/Debug/)
(同样自己对一下fbx目录不要直接复制)参考链接 - 注意空格
- 把下面这个配置改成这样
- 以上3步配置完后可以免去手动添加编译和链接选项的操作
glsl的语法高亮
MSB6006 cmd.exe exit 1
- 一开始找不到错误代码行很奇怪
- 其实这是个cmake错误,比如cmake里的某个文件丢了等等
- 通过output的log就可以找到错误原因
骨骼动画动作幅度过大
- 原因1:在获取点的坐标的时候,把最后一个w变量设置为了0,正确的应该是1
- 原因2:矩阵乘法问题,先把矩阵相乘后相加了,正确的乘法顺序应该是:(骨骼在t时刻的变形矩阵 * 骨骼空间映射矩阵 * 初始位置)* 权重,然后向量相加
骨骼动画的模型空间和世界空间转换问题
- 简单来说就是直接获取mesh里的顶点位置,获取到的不是世界空间的位置,需要进行上面链接里的转换才能获取到真正世界空间的位置
同一段代码,画一个模型的时候很正常,画另一个的时候出现很多三角形空洞,还有奇奇怪怪的线
- 要检查mesh是否是triangle mesh
在传uniform数组的时候遇到编译错误
具体表现是,只要不使用某些uniform变量,就不会出现编译错误,一旦使用就编译错,然后一般报offset XXXX的位置出现编译错
- 关于uniform数组位置的计算方法
- 检查是否uniform变量size过大:uniform limitation
模型失去了大部分的颜色和所有的贴图
- 检查in-out变量是否对应、以及in-out关键字是否正确,当把所有的in都写成out的时候会遇到这个问题
在计算切线的时候,部分切线值是NAN导致模型出现黑色空洞
- vector不能取地址!!!
- 原因是通过指针指向vector里的元素,这样一旦vector进行扩容,指针就会指向不可达的位置或者错误的位置!!!
OpenGL的各种库的依赖关系调整
最重要的提示来自这里:
遇到的坑:glad几乎与所有的使用到opengl的库(例如各种gui库)的默认编译选项不兼容,会遇到gl和glew的循环依赖问题导致编译不过
推荐的解决方案 1. 不使用glad
- 使用glfw+glew的组合,其中glew自己去官网下载然后按照官网教程进行配置
这个配置很简单,就是把默认的dll文件扔到system32文件夹下,然后把include目录和lib目录加到项目属性中,然后把glew32.lib和glew32s.lib加到链接属性中
CEGUI的编译和样例运行方法
- 编译教程参考这个
- 不需要配置boost和ogre这些东西,直接编译,然后用opengl3运行也是可以的
- 遇到报dll找不到的错误肯定是文件夹合并的时候出问题了
将CEGUI与OpenGL代码进行合并的方法
- 在上面的代码运行成功后,直接把build/bin目录里所有文件拷贝到OpenGL工程的工程目录下
- 也不要花时间去配dll路径啊环境变量啊这些东西了
- 搞了一整天,吐血
遇到一个特别奇怪的情况,CEGUI的窗口和按钮的图形被其他模型的图形覆盖了!
- 最终发现问题出在texture上。
- 如果shader包含过多的texture变量,并且其中部分没有active然后bind使用,那么这些多设置的变量继承之前active的值
- 后续GUI如果仅仅通过active(不配套bind)来使用它自己的texture,那么就会导致active的texture带有之前继承的值,而不是gui自己的texture
- 简单来说就是locate和active和bind的texture一定要配套!
在添加了泛光效果之后CEGUI消失的问题
- 原因是泛光效果的最后一步画的只有一张深度为0的texture,而CEGUI也是在深度为0的平面上画的,两者互相叠加导致先画的那张被后画的遮挡(CEGUI被quad遮挡)
- 所以解决方法就是让CEGUI在最后一步画,并且在画之前清空深度buffer
另外中间不知道为什么又出现了贴图混乱的问题,然后又不知道调了什么就调好了,脑阔疼
天空盒的问题(天空盒不显示、天空盒出现漏洞、模型走到天空盒外面、天空盒是个小立方体)
- 检查天空盒数据的读取问题(顶点数据、贴图数据)
- 检查天空盒的渲染函数调用顺序是否正确
- 检查深度测试相关设置是否正确
- 检查模型大小是否过大(理论上没有影响)
- 检查是否设置了gl_Position那边的z=w
- 我特么也很抓狂啊,不知道改了什么天空盒就正常显示了
互相遮挡时阴影出现空洞
- 再开始画深度map之前设置为
glCullFace(GL_FRONT);
画完深度map之后设置回来glCullFace(GL_BACK);
骨骼动画的过渡动画插值时的骨骼缩放问题
- 远古网易大佬关于“在世界坐标系进行骨骼动画插值导致骨骼缩放问题的解决方案”的博客
- 对于fbxsdk来说,就是需要对evaluationlocaltransform的矩阵进行插值后乘起来获取模型空间的变换矩阵,而不是通过evaluationglobaltransform获取矩阵后插值来获取模型空间的变换矩阵
骨骼动画中的法线贴图问题
- 从法线贴图中读到的法线是在切线空间中的,所以需要转到世界坐标系中进行运算(或者把所有东西都转到切线空间中运算)
- 首先包含骨骼动画的TBN矩阵中的TBN三个值,应该是fbx文件中读到的模型空间的值先乘骨骼矩阵,然后乘model矩阵后的值
- 世界空间的法线=TBN * 读到的法线贴图里的切线空间的法线
- TB和N如何随动画变化
贴图出现网格样条纹或者贴图出现奇怪纹路完全不对的情况
- 美术资源里的贴图的通道数目是完全随机的
- 如果使用stbi image来加载图片,推荐使用一劳永逸的加载方法:
骨骼重定向
PBR渲染得到的画面过白的问题
- 可能是太早进行hdr和gamma校正,把所有的hdr和gamma校正都放到最后一步做就可以了
关于添加音频
- 用irrKlang这个库就可以,超级好用
Unity
Toggle的文字不显示
- ContentSizeFitter有时会刷新失败
- 所以能不用就不用吧
onScroll事件无法穿透
- 直接在一个Button上添加一个EventTrigger, 会导致所有事件被这个Button截获, 如果这个Button放在一个ScrollRect里, 那么当鼠标停留在这个Button上的时候, ScrollRect将不能滚动
- 参考资料
- 参考资料
Unity 2018.4的VideoPlayer在安卓10上无法播放本地视频
- 是Unity本身的bug, 安卓10更新了权限管理策略导致的, 无法修复
- Issue&Patch
- 讨论
- 顺便学习了一下adb打unity应用的log
美术资源复制到程序资源文件夹, prefab中引用丢失
- 传资源的时候需要把meta文件也一起传, meta文件里有guid, 然后unity是根据guid确定的引用关系, 但是猎奇的是, 对于相同MD5的同名文件, unity两次生成的meta文件里的guid不一样!!!
一篇讲Unity音效基础的很好的资料
[RuntimeNavMeshBuilder: Source mesh xxxxxxxxxxxxxxx does not allow read access]
[Unity加载png文件为贴图]
Unity IMGUI的TreeView怎么override KeyEvent获取Key
[Maya在新场景中自动创建模型并导出为fbx文件]
Unity编辑器报错Dimensions of color surface does not match dimensions of depth surface
- 解决方案: 把SceneView里面的灯光关了
Python里读取不同编码的文件
关于Unity的MenuItem的Priority的排列
[UI画线]
- UILineRenderer(Unity UI Extension库的)
Unity无法调用System.Web里面的某些API
[Unity每次Play的时候没有清理单例]
#if UNITY_EDITOR
EditorApplication.playModeStateChanged += state =>
{
if (state == PlayModeStateChange.EnteredPlayMode)
{
m_GraphInit = false;
}
};
#endif
[如何使用UnityEditor内置的icon]
// uss用法:icon名字参见https://github.com/halak/unity-editor-icons
background-image: resource('d_icon dropdown@2x');
// 代码用法
var builtIn = EditorGUIUtility.IconContent(name);
if (builtIn != null && builtIn.image != null)
{
return builtIn.image as Texture2D;
}
unity自带的序列化反序列化
Perforce里面不同路径对应自定义的不同文件夹
Unity打包时wwise bank报violation相关的错
[Unity Resolve package报错:unexpected token in JSON at position 0]
- 使用Perforce追踪的json文件,应该使用text type,而不是utf8,重新添加或者edit为text
Miscellaneous
个人SVN配置和使用
- 去软件中心下载安装svn
- 最好创建一个跟远程文件夹一样的本地空文件夹,然后右键svn checkout,输入url
- svn的账号和密码是邮箱前缀/邮箱密码
- 然后svn add
- svn commit
多台电脑使用同一套键鼠
- 首先,Microsoft早就发现了这个问题,并且对应开发出了Mouse Without BOrders 软件(巨硬!)
- 或者synergy