zoukankan      html  css  js  c++  java
  • 【学习方法随笔】如何学习大工程中的某一功能

    前言:这篇文章也许给刚入行的小白们做一个参考,也算我的随笔,记录下学习历程。入行已久大佬们请出门右拐谢谢。。。


    最近在师傅的带领下搞 UE4 自动曝光功能的移植,研究功能就看了两周,但还是云里雾里。直到今天师傅给点拨(点拨了好多次)才总算理解流程和各实现的用法。。。

    也发现了自己的问题:面对到 UE4 这样体量的工程,在研究新功能的时候完全束手无策,跟无头苍蝇一样先去钻研各种细节,但弄了半天也不明白为什么要这么搞,所以在这里记录一下如何学习一个新的功能。

    在一开始了解一个新功能时,要学会利用调试环境,下断点,看堆栈。第一遍看代码要以理解整个功能流程的目标去看!!!不要像我开始一样一进去就钻细节,尽管实现细节都知道,但完全不明白其中意义一点用都没有。

    师傅建议我可以记录堆栈图,看整个流程中每个环节的输入输出,参数在哪里被调用,函数何时出栈等。总之是大概的流程。可以用以下的方式记录下来:

    /** 树状图记录堆栈流程 */
    //* Function 1   (一般是最外层执行,可选择不记录输入输出)
    //* 
    //* -->* Function 1_1 (记录输入,输出)
    //* -->* Function 1_1 END     (1_1 运行完出栈)
    //*
    //* -->* Function 1_2
    //*
    //* **** --> Function 1_2_1    
    //* **** --> Function 1_2_1 END   (1_2_1 运行完出栈)
    //*
    //* -->* Function 1_2 END
    //*
    //* ...
    //*
    //* Function 2
    //* ... (程序继续运行)
    

    以上是示例记录的方法,实际情况可以有所不同,但要保证能记住,能看懂直到了解大概流程前,一直循环这一步

    以 UE4 4.21 中的 Auto Exposure(也叫 Eye Adaptation)为例,在第一次学习时,应该在处理所有移动端后期的总流程 FPostProcessing::ProcessES2 函数中去看:

    1)在这里可以看到在 BloomSetup 过程中,会生成一个亮度图存在 Render Target 1 中,然后进行多次 Down Sampling。

    2)Down Sample 操作结束后,引擎会在实际计算自动曝光的地方用到 Down Sampling 之后的结果,用这个 RT 进行整个渲染界面平均亮度的计算。然后结合计算出的结果和前一帧的亮度计算出新的亮度。

    3)然后将新的亮度传递给 Tonemapper 进行色调映射。流程结束。

    在了解了基本流程以后,则要进入流程中的函数内部看对输入输出的具体操作,更细的层面则要去研究算法,看看为什么要这么做。这需要我们在后续的调试中下更多的断点,并且尽可能一步步的往代码深处挖掘。也要记住时刻记录自己的疑问,但不用太过纠结;很多疑惑会在对代码了解更深之后自然解开。

    以上就是我最近的收获体验,感谢刚入行就碰到了很好的师傅带着我学习 ^v^ 受益良多。

    如果还有新的想法我会随时补充。

  • 相关阅读:
    Ubuntu16.04安装Docker、nvidia-docker
    Java 对象和类
    Java基础知识总结
    Java 学习路线
    编写radware的负载配置
    MySQL的主从复制+双主模式
    模拟MBR Grub故障修复
    搭建Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡
    golang数据库操作初体验
    我操蛋的2019
  • 原文地址:https://www.cnblogs.com/thdt/p/14237738.html
Copyright © 2011-2022 走看看