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^ 受益良多。

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

  • 相关阅读:
    如何:为 Silverlight 客户端生成双工服务
    Microsoft Sync Framework 2.1 软件开发包 (SDK)
    Windows 下的安装phpMoAdmin
    asp.net安全检测工具 Padding Oracle 检测
    HTTP Basic Authentication for RESTFul Service
    Windows系统性能分析
    Windows Server AppFabric Management Pack for Operations Manager 2007
    Mongo Database 性能优化
    服务器未能识别 HTTP 标头 SOAPAction 的值
    TCP WAIT状态及其对繁忙的服务器的影响
  • 原文地址:https://www.cnblogs.com/thdt/p/14237738.html
Copyright © 2011-2022 走看看