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.明天要起早给老妈挂号,得休息了

     
  • 相关阅读:
    智能推荐算法演变及学习笔记(三):CTR预估模型综述
    从中国农业银行“雅典娜杯”数据挖掘大赛看金融行业数据分析与建模方法
    智能推荐算法演变及学习笔记(二):基于图模型的智能推荐(含知识图谱/图神经网络)
    (设计模式专题3)模板方法模式
    (设计模式专题2)策略模式
    (设计模式专题1)为什么要使用设计模式?
    关于macOS上常用操作命令(持续更新)
    记录下关于RabbitMQ常用知识点(持续更新)
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
    SpringCloud教程二:Ribbon(Finchley版)
  • 原文地址:https://www.cnblogs.com/yaukey/p/unity_keng_keng_keng.html
Copyright © 2011-2022 走看看