• elvish ray 0.5 beta History



    /*********************************************************************************/
    /*                                                                               */
    /*                     LrCore Development History & Notes                        */
    /*                                                                               */
    /*********************************************************************************/


    /*---------------------------- LrEnder Demo 0.1 ---------------------------------*/

    2003.8.17

    光线追踪框架

    2003.8.24

    基本几何体渲染

    2003.8.30

    贴图支持

    2003.8.31

    图形显示

    2003.9.6

    控制台程序

    2003.9.27

    场景描述文件支持

    2003.10.12

    BSP算法支持

    2003.11.9

    多线程支持

    2003.11.16

    GI算法支持

    2003.11.17

    Shader支持

    2003.12.3

    动画支持

    2003.12.21

    FastBSP支持


    /*---------------------------- LrCore beta 0.5 ---------------------------------*/


    2004.2.22

    基础扫描线框架就绪
    所有屏幕点一律转换到世界坐标系计算Shader

    2004.4.13

    完全改变基本数据结构和体系

    2004.8.26

    取消图形显示和控制台架构
    提供VB库

    2004.8.27

    改为基于STL的数据结构

    2004.8.28

    完成全新场景描述语言的构建

    2004.8.29

    开始编译

    2004.8.31

    错误之莫名其妙,之隐蔽,之模糊不清,实属罕见

    2004.9.4

    记事本、VC、VB对文本中tab键的处理都不一样,导致格式不同!

    可能的错误:
    每次调用push_back都移动了内存地址,但原先的指针引用没有相应改变!

    2004.9.19

    完成shader变量类型支持

    dangerous pointers that might change when rendering...

    a_edgelink[]
    a_trilink[]
    x_edgelist[]

    2004.9.26

    MD系统被新博网络重装了,原来硬盘上的数据不懂还能不能弄回来!!!
    得亏我在软盘上备份了Lr!!!
    要不然哭都来不及!!!!!

    2004.10.3

    写了coding specification
    依然不能正常运行,raytrace都不行。

    按理应该在第119条扫描线处开始工作

    2004.10.13

    triangle_01 的 material 错误指向 Default Material
    left edge 和 right edge 的 normal vector 数值居然相同

    第221行出错!
    i = 1
    j = 3

    错误可能和 x_edgelist 有关!

    2004.10.17

    终于找出错误原因了,原来是triangle fragment内存没有释放!

    从213行开始处理遮挡错误
    正确的排序应该是 1 2 1 2

    2004.10.20

    x_edge 位置错误,应该从 [ 329 194 ] 开始

    2004.10.23

    在循环中,应该用e的地方写成i,导致读写出错
    循环中的变量在全局可见实在是危险!

    x_edge 上有缺口,从298行开始debug

    2004.10.24

    发现在两个triangle的交点处z depth居然不相等!
    推测是*面方程错误!

    重新推倒了*面方程,终于得到正确的 x_edge 位置

    在比较z depth的时候加了个模糊比较,得到正确的消隐效果了!

    raytrace 还是一片漆黑……弄不懂为什么了

    delete G-Buffer 出错,这个玩意本来就有问题!

    2004.10.25

    问题是重复delete造成的,因为delete并不会将指针设成NULL,
    就像当初的free一样~

    还没找到很好的字符串和消息解决方案

    2004.10.26

    在 i = 1 j = 5 处访问不该访问的端点缓存!
    原来在循环中写 i < 100 这样的句子的时候,
    当循环结束时,i的值并不是99而是100!

    合并区间时当 i = 2 j = 1 时出错!

    发现问题原因了,还是 push_back 导致内存移动!该死的!
    能不能没有指针这个东西?

    原来的 triangle fragment 链表方案根本不能减少内存用量,
    反而增加了内存用量!float + void* + void* 占用 12 字节,
    如果直接用 float + float 占用 8 字节,而且代码简化很多!

    终于能正确处理消隐了!

    2004.10.29

    继续提供控制台渲染,但没有图形显示
    暂时取消VB库

    循环中边缘处的bucket改变了高度值,导致下一列的bucket范围错误

    2004.10.30

    多bucket模式能正确渲染了!一直是slnum惹的祸!

    用max重建了场景,发现交点是正确的,
    推测是判断三角区域的预计算部分出错了

    object是被拷贝到BSP空间了,但是object里的vtxList和triList等却是空的!

    raytrace终于能工作了!错误都出在原来的坏编码习惯上!

    2004.11.2

    不能重载new和delete操作符,调试版本暂时不用MemoryManager

    anti-aliasing 慢的不得了,减少了内存操作后还是慢!

    一直误解了,其实泛型算法不一定要用在STL容器上

    扫描线反走样部分失败……还要继续调试……
    一开始设计算法的时候就应该有清晰的思路和坚实的理论基础!
    这样的程序错误多是可以理解的,但是也反应出设计时思想的缺陷!
    很多错误是最初就可以避免的!

    2004.11.3

    重写了GBuffer部分,全部使用new和delete
    取消aa pixel的动态分配!

    反走样简直越反越走样,实在不行我只好启用另一套方案,用raytrace来渲染aa pixel

    2004.11.4

    用反走样模式进行区间扫描的时候,推测triangle排序不会出错,
    错在对 nodelist 端点的访问上!

    2004.11.5

    nodelist 端点访问并没有出错呀,是在第3个区间z深度排序错误!

    找出错误了!在反走样模式区间端点的z值是离散的没有连续性的,
    按非反走样模式一样利用连续性来计算z值所以出错!

    2004.11.6

    MD内存访问出错,我就不明白 f_nodelist 释放怎么可能出错!!!

    2004.11.7

    TMD调试了这么久还是搞不懂为什么 f_nodelist 释放会出错!

    推测是在draw_tri里导致问题,因为AABucket的render段代码和非反走样模式几乎是相同的,
    而非反走样模式是可以正确渲染的!
    进一步推测是drawAASample出错!

    终于明白了!
    前面浪费了大量时间调试render部分,其实错误出在分配图像大小不够!
    错误的访问内存导致连带错误!

    2004.11.8

    试了一下用raytrace来渲染AABucket,速度还可以,
    但因为raytrace和scanline渲染的结果本来就有差异,所以边缘不能很好接合。

    2004.11.9

    scanline模式下能得到正确的光照了,原来是view to world矩阵错误!

    AABucket的象素方向颠倒了,所以出现裂缝!从150行开始debug

    原来是因为edge couple的一边没有被放进AABucket所以没有效果!

    酷!终于能正确反走样啦!

    多个triangle的反走样还是错误的!!!
    反走样模式下多Bucket渲染一片漆黑……
    任何模式多线程渲染都是一片漆黑……

    每个AABucket都要对triangle颜色重新采样!

    2004.11.11

    反走样边缘已经不错了,但相交边界的处理还很糟糕!

    2004.11.13

    AABucket中区间triangle排序错误,导致相交边界反走样错误!

    相交边界能正确反走样了,错误是因为在AABucket中对方程系数进行了缩放,
    但其实方程系数是不需要缩放的!

    相交边界开始处的AAInterval被取消了!原因是两条边的AAPixel粘在一起了!

    第 309 行出了个缺口!

    2004.11.14

    相交边界的问题解决了,办法是用aa_joint标记粘在一起的aa pixel

    缺口问题是在aa bucket中边失活后找不到替代边!

    该死的,活化边对应错了!!!

    其实没必要把替代边放进aa bucket因为aa pixel很小,
    而且找不到替代边的情况只发生在三角转折处,所以直接防止边失活就行了

    三角表面有些奇怪的花斑……从177行开始debug

    2004.11.15

    花斑问题解决了,原因是aa bucket中draw_tri时zx没有缩小

    处理tracer和bucket问题,多线程debug比较麻烦,先从单线程开始

    担心什么来什么,特殊情况果然出现了!
    当triangle正贴着bucket左边界时,这个triangle不会被渲染!

    每行扫描后活化边的active要还原为-1,防止下一行使用旧值!

    从bucket(4,2)开始debug

    2004.11.16

    不管是否渲染该行,都要更新数据,保证安全

    跨越bucket边界的反走样成为技术难题!要重新考虑算法!

    如果g-buffer最后一个象素是aa pixel,这个象素不会被渲染,
    只要让g-buffer宽度增加 1 就能解决这个问题!

    2004.11.17

    重写了scanline内核!!!把反走样模式和非反走样模式的代码分开了!
    代码更加清晰易读!!!

    2004.11.18

    如果this_interval被删除了,那么last_interval就不应该指向this_interval
    删除了根本没用到的数据成员cur_normal和cur_uv!

    知道错误原因了,非反走样区间范围不正确!
    禁止g-buffer移动设置点就解决了!

    2004.11.19

    非反走样模式可以正确的避免重复进行 z depth 排序了!
    但是x_edge2d的数据结构里需要增加一个active标记

    多bucket反走样模式正确渲染了!原来错误出在最后一个区间没有被渲染!
    必须单独添加代码特殊处理最后一个区间!

    2004.11.20

    写了exporter for 3ds max

    导出了一个球体,在反走样模式不能正确渲染共享边!

    正式改名为 LrCore

    2004.11.21

    可以正确渲染共享边了,错误很白痴,但是很难找!
    把 1 / ( a * b ) 写成 1 / a * b 了!

    2004.11.23

    如果是一个edge2d指针,那么用==比较时只会比较地址而没有调用自定义==操作符,及其危险!

    防止了共享边的三角之间求交线,可以正确渲染了!

    2004.11.26

    STL偷偷调用了结构成员中vector的拷贝函数,
    导致内存用量激增,速度急剧下降!

    原来暗自trace shadow我都不知道!

    又是一个极白痴的错误!bucket重建边表时没考虑好重复边!

    tracer行为错误是由于搜索bucket时忘了写return造成的!

    2004.11.27

    消除了表面缺口,原因是三角的三边有时会同时成为活化边,
    这时还要加一个判断选出正确的两条活化边!

    从bucket(3,3)第60行开始处理边缘奇怪的棱角!
    找到原因了!边 k 值计算错误!k 是方程系数不能通过
    取整后的 slnum 来计算,应该用精确值!

    删了那个愚蠢的 sl_round !帮不上忙还捣乱!
    直接用 round 了!

    2004.11.28

    原来是 isOut 这个该死的东西计算错误导致活化边无法激活!

    mip-map 支持,重新设计了贴图系统!

    2004.11.29

    光追踪的速度问题可能是太多物体都位于pObj造成的!

    2004.12.1

    重写了光线追踪的内核!!!采用了新的分割算法!!!
    速度变得非常快!!!

    2004.12.3

    找到scanline出现小缺口的原因了,triangle的le和re被错置了!

    由于使用了四舍五入,边有可能被提前删除而不被添加到AABucket中,
    这样即使三角被加入AABucket也会因为缺乏边而被删除!
    解决方法是添加所有边到AABucket再进行裁减!

    2004.12.5

    在bucket起始行会被误判断为 AAPixel

    2004.12.6

    改变了mip-map坐标系,重写了mip-map部分,大大简化了代码!

    2004.12.7

    推翻了旧的scanline内核重写了关键部分,大大简化了代码

    大部分代码是基于STL的了

    2004.12.8

    表面出现奇怪的凹凸不*的现象,不知如何解决

    2004.12.10

    通过特殊 shader 判定错误出在 z 值的计算上!

    2004.12.11

    错误居然是不小心把 + 写成了 += !

    预计算时间太长了,还是不能完全正确的渲染反走样!

    2004.12.12

    当父物体被取消选择,子物体也应相应的被取消选择

    z-buffer 精度不足会导致边缘严重锯齿,关掉 z-buffer 图像质量反而更好

    2004.12.13

    反射效果现在很糟糕,会有严重麻点!
    阴影效果死都出不来!!!而且莫名其妙的 0.0 < 0.0 会变成 true 掉!!!

    坐标系可以和 3ds max 对应了

    2004.12.14

    内部规定:如果一条边没有 t2 ,那么 t[1] 的值将被设成与 t[0] 相同!

    重写了视域裁剪部分,理清了思路,大大简化了代码!

    裁剪存在严重问题:会产生太多新多边形!

    2004.12.15

    解决了光线追踪的麻点问题,只要把包围盒扩大一点就行了,
    因为当面和坐标轴*行时,它的包围盒宽度为0

    找到一直没有阴影效果的原因了!参数 soft_edge 和 cut_shadow 应被初始化为1

    2004.12.16

    photon map 应该在 bsp division 之前初始化,否则子物体得不到 photon map 指针

    2004.12.17

    终于可以正确裁剪景物了!!!

    原来错误出在:
    1.没有防止对和裁剪*面*行的边的裁剪
    2.没有标记位于*裁剪*面前的景物为不可见

    2004.12.19

    写完了shader范例

    2004.12.20

    处理了突然出现超亮 photon 的问题,
    原因出在反射折射没有微*移光线的 src,只移动 pos 是不够的

    微偏移量大小的选择非常重要!

    2004.12.21

    多线程可以正确渲染了,原来问题出在 LeaveData 前有一个 return,
    导致没有 LeaveData

    有些不可见的三角可能在裁剪中因为顶点可见而被判断为可见,
    防止了这种情况,可以正确反走样了

    LrCore 调试工作到此结束!!!

    2004.12.28

    偶然发现了 LrCore 反走样代码部分的错误,但是参赛作品已经寄去了……

    错误又是逻辑不够完备造成的,就像处理了if但没有处理else的情况……

  • 相关阅读:
    windows server 2012 如何开启 hyper-v 并创建虚拟机
    ABP框架系列之二十四:(Email-Sending-EF-电子邮件发送)
    ABP框架系列之二十三:(EF-MySql-Integration-EF-MySql-集成)
    ABP框架系列之二十二:(Dynamic-Web-API-动态WebApi)
    ABP框架系列之二十一:(Domain-Services-领域服务)
    ABP框架系列之二十:(Dependency-Injection-依赖注入)
    ABP框架系列之十九:(Debugging-调试)
    ABP框架系列之十八:(Data-Transfer-Objects-数据转换对象)
    ABP框架系列之十七:(Data-Filters-数据过滤)
    ABP框架系列之十六:(Dapper-Integration-Dapper集成)
  • 原文地址:https://www.cnblogs.com/len3d/p/1287020.html
Copyright © 2020-2023  润新知