zoukankan      html  css  js  c++  java
  • 好久没有更新

    太久没更新了,不过很多心得都是随手记在了印象笔记,最近工作状态不是很好,一直没有调整到最好状态,比较烦躁,加上前两天又跟老妈吵架,她第二天血压还升高,我就立马自责后悔了,最近各种生活烦心事让我真是压抑,心情也是坏到不行,我是个很容易受情绪影响的人,工作也是自然受到影响,但我一直在努力调整,告诉自己一心工作来淡忘这些,但效果还有待坚持呢训练,现在不是一个人在战斗,也肩负着整个团队共同的目标和希望,加油!

    最近做了些事情,一些有坑的地方,翻出来分享下好了,有些没想起来的就没写了:

    1.由于找了很多零散资源,大多模型贴图都是各顾各的,所以就写了个工具,将很多贴图合并成Atlas,然后再修改模型的顶点uv,适配到atlas里面,这里有一个坑,如果uv存在wrap的情况,那么换了atlas贴图后就不对,两种方法:一是就别换uv存在wrap顶点引用的贴图了,二是把对应的shader再写一份,修改ps,让wrap的uv全都落在atlas中原有贴图的区域;

    2.发现编译完的demo,在ios上ok,但是android上闪烁非常厉害,一直不明原因,后来在官方论坛了解到不多的几个人讨论过,原因是z-buffer的精度与摄像机的裁剪距离问题,解决方法是将摄像机的近切面设置的足够大,远切面设置的足够小;

    3.写了个简单的倒影水,无diffuse,无specular,法线贴图+cubemap,这次是ios出了幺蛾子,反射完计算的颜色总是不对,无论眼睛的位置在哪里,反射取得的颜色都是黑乎乎一片,后来逐步排查,是shader里浮点数精度的问题,为了优化我把原来的很多float尽量都换成了fixed,结果就在reflect的vector换成fixed,悲剧旧出现了,后来改成half,都好了,这个不同的硬件真的需要各种测试,过度优化就是犯罪;

    4.下载了一个地形插件T4M,能将unity的内置地形转换成制定顶点数量的网格,并可以刷地表,但是地形是一整块不能被unity裁减,也不能导出非矩形的地形(会出错),于是在源代码的基础上开始改动,增加地形导出分块功能,任意选择导出成axb块,并对导出的每一块进行优化,如果这一块里面的顶点高度没有起伏,则只保留4个顶点,并导出任意长宽的地形不会变形,经过测试,原来一个8100个顶点的地形,分割成6x6块,经过优化后,导出的地形顶点是5300多个,当然了这个需要看地形复杂度还有分割数量了;

    5.分割并导出的地形理论上很完美,可以做长方形,也可以被untiy裁减,但是问题也来了,当你打光时发现噩梦来了,所有分割块的边缘,全是各种万恶的打光缝隙,无论你怎么调整打光参数,都不能完美解决,总会有个你意想不到的地方蹦出一条缝,于是后来我只能另辟蹊径:同时将原地形导出一个不分割块的,先隐藏分块地形,用未分块这个参与打光,打光完毕后,隐藏未分块的,显示出分块的,用我写的一个小工具,将未分块地形的光照图信息全都拷贝至分块地形中,于是整个世界瞬间就完美了,会成功的关键是分块后的地形顶点uv与未分块地形是保持一致的;

    6.场景中的透明物体,由于排序问题,可能会造成 drallcall batching 失败;

    7.与同事讨论服务器的一个功能时,用到了一个很有趣的c++模板功能,很难解释这个需求,大意是为了尽量使用编译期对类型的判断和萃取,判断一个类是否继承自另一个类,并且是否具有某个特定行为。

     1 template<typename Base, typename Derived>
     2 class IsClassConvertible
     3 {
     4 private:
     5     typedef char                ConvertYes;
     6     typedef struct {char a[2];} ConvertNo;
     7     
     8 private:
     9     template<typename T> static ConvertYes Test(T*);
    10     template<typename T> static ConvertNo  Test(...);
    11     
    12 public:
    13     static const bool Value = (sizeof(IsClassConvertible<Base, Derived>::Test<Base>(static_cast<Derived*>(0))) == sizeof(ConvertYes));
    14 };
    15 
    16 struct singleton_need_init_type {};
    17 struct singleton_no_need_init_type{};
    18 
    19 template<typename Base, typename Derived, bool Toggle>
    20 class SingletonInitTypeBase
    21 {
    22 public:
    23     typedef singleton_no_need_init_type init_type;
    24 };
    25 
    26 template<typename Base, typename Derived>
    27 class SingletonInitTypeBase<Base, Derived, true>
    28 {
    29 public:
    30     typedef singleton_need_init_type init_type;
    31 };
    32 
    33 template<typename Base, typename Derived, bool Toggle = IsClassConvertible<Base, Derived>::Value>
    34 class SingletonInitType : public SingletonInitTypeBase<Base, Derived, Toggle>
    35 {
    36 public:
    37     typedef typename SingletonInitTypeBase<Base, Derived, Toggle>::init_type init_type;
    38 };
    39 
    40 template<typename T>
    41 inline bool IsSingleNeedInit(T* pObj, singleton_need_init_type)
    42 {
    43     std::cout << "I need to be inited!
    ";
    44     return pObj->Check();
    45 }
    46 
    47 template<typename T>
    48 inline bool IsSingleNeedInit(T* pObj, singleton_no_need_init_type)
    49 {
    50     std::cout << "I do not need to be inited!
    ";
    51     return true;
    52 }

    8.一两年前写过的一个叫SafeArray的安全数组模板和一个叫YKArchive的文件序列号类被我翻出来,看能不能用在数据表工具的读写上,结果放在linux和mac下编译才知道当初代码写的多么不遵循标准,害的同事改了好久的编译错误,然后才整合到项目里,让我惭愧啊惭愧;

    9.还有啥其它有点印象的东西,想不起来了,对了,最近买了3本书。

    10.明天要起早给老妈挂号,得休息了

     
  • 相关阅读:
    Leetcode单链表反转
    算法--二叉搜索树的python实现
    云服务器(阿里和腾讯)搭建网络云盘Nextcloud
    VGG16和集成模型(LeNet,CNN,Net均匀池化)比较
    git与github
    pyspider-崔庆才猫途鹰
    给 Python 添加进度条 | 给小白的 tqdm 精炼实例!
    @wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它
    并发和并行 | Python中实现多线程 threading 和多进程 multiprocessing
    Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式
  • 原文地址:https://www.cnblogs.com/yaukey/p/unity_keng_keng_keng.html
Copyright © 2011-2022 走看看