len3d

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理


/*********************************************************************************/
/*                                                                               */
/*                     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的情况……

posted on 2008-09-08 19:13  Len3d  阅读(372)  评论(1编辑  收藏  举报