cmc233

Forum Replies Created

Viewing 30 posts - 1 through 30 (of 52 total)
  • Author
    Posts
  • in reply to: diffuse+微表面的问题? #8483 Score: 0
    cmc233
    Participant
    6 pts

    kd,ks,c都是定义的常数?这样的话不能量守恒啊(左=kd*c+ks*E(w_o), 不常为1)

    in reply to: 环境光渲染出来偏暗 #8337 Score: 0
    cmc233
    Participant
    6 pts

    所以作业文档里贴的图,prt显示的debug的图片也比js里的图亮啊(虽然图1,2不是同一个场景),而且文档里的图应该没乘kd/pi,其实给的参考图挺随意的

    in reply to: 环境光渲染出来偏暗 #8333 Score: 0
    cmc233
    Participant
    6 pts

    我说的第二种情况意思是:你在prt里没乘kd/pi,然后在shader.glsl里写的是的kd/pi *sum TransportSHCoeffs*LightCoeffs,所以导致两倍不一样。
    如果你shader.glsl也是直接sum TransportSHCoeffs*LightCoeffs,感觉就是gamma矫正的问题了,prt里保存png时做了如图的空间转换,在js里pow(vColor, vec3(1.0/2.2))应该就得到差不多结果了?

    • This reply was modified 2 years, 11 months ago by cmc233.
    Attachments:
    You must be logged in to view attached files.
    in reply to: 作业资料 & 代码勘误 #8331 Score: 0
    cmc233
    Participant
    6 pts

    作业 2

    还是觉得tools.js的mat4Matrix2mathMatrix函数有问题,glmatrix的mat4是按列优先存储的,但mat4Matrix2mathMatrix读的时候是按行优先存储读的,mat4Matrix2mathMatrix返回的是原矩阵的转置

    打印了一下结果也确实是转置了:

    let v = mat4.create();
    mat4.fromRotation(v, math.pi / 6, [0, 1, 0]);
    let v_ = mat4Matrix2mathMatrix(v);
    console.log(v_);

    0.8660253882408142, 0, -0.5, 0
    0, 1, 0, 0
    0.5, 0, 0.8660253882408142, 0
    0, 0, 0, 1

    但是实际旋转矩阵应该是
    0.8660253882408142, 0, 0.5, 0
    0, 1, 0, 0
    -0.5, 0, 0.8660253882408142, 0
    0, 0, 0, 1

    in reply to: 环境光渲染出来偏暗 #8330 Score: 0
    cmc233
    Participant
    6 pts

    两种可能

    1.prt里存储成png图片时将线性空间转换到了sRGB空间 Color3f tonemapped = coeffRef(i, j).toSRGB();颜色计算给webgl的时候应该也得做相应的gamma矫正

    2.prt里计算TransportSHCoeffs有乘以kd/pi吗?prt里Color3f Li()返回的是sum TransportSHCoeffs*LightCoeffs

    in reply to: 【作业2】裙子是否需要双面渲染 #8310 Score: 0
    cmc233
    Participant
    6 pts

    好的,谢谢

    in reply to: 【作业2】关于prt.cpp源程序图片载入对应关系 #8298 Score: 0
    cmc233
    Participant
    6 pts

    测试了一下,的确是反的

    in reply to: 【作业2】环境光球谐旋转推导 #8294 Score: 0
    cmc233
    Participant
    6 pts

    不对,打印下来结果不对,例如取
    let v = mat4.create();
    mat4.fromRotation(v, math.pi / 6, [0, 1, 0]);
    let v_ = mat4Matrix2mathMatrix(v);
    console.log(v_);得到

    0.8660253882408142, 0, -0.5, 0
    0, 1, 0, 0
    0.5, 0, 0.8660253882408142, 0
    0, 0, 0, 1

    但是实际旋转矩阵应该是
    0.8660253882408142, 0, 0.5, 0
    0, 1, 0, 0
    -0.5, 0, 0.8660253882408142, 0
    0, 0, 0, 1

    in reply to: 【作业2】环境光球谐旋转推导 #8292 Score: 0
    cmc233
    Participant
    6 pts

    打印出来的确是没有问题的。
    但是这是为什么啊,i*4+j是按行在读取,可glmatrix的文档里写mat4是按列存储的

    Attachments:
    You must be logged in to view attached files.
    in reply to: 【作业2】环境光球谐旋转推导 #8291 Score: 0
    cmc233
    Participant
    6 pts

    感觉文档在写推导公式的时候有点混淆SH系数和SH函数。框架提供的SHEval(x,y,z)返回的值是前l阶所有SH函数在w=(x,y,z)处的取值,但是推导过程中P指的是SH系数?这也是为什么第三步中不应该是M*原SH系数,而应该是原SH系数*M

    in reply to: 【作业2】环境光球谐旋转推导 #8286 Score: 0
    cmc233
    Participant
    6 pts

    天空盒子原来的方程是f(w),将整个盒子旋转R后的新盒子,相当于在w处的取值是原来R^(-1)*w处的取值,得到的新方程就是f(R*w)啊
    我的推导只是将f(w)用球谐函数展开了啊,P就是球谐函数,lamda就是对应系数,为什么看不懂?我的推导也是基于文档中的性质二(而且这个性质才应该是球谐函数的旋转不变性,参见https://en.wikipedia.org/wiki/Spherical_harmonics#Rotations)
    然后,我其实没看懂文档中列的第一个性质是什么意思

    in reply to: 【作业2】环境光球谐旋转推导 #8283 Score: 0
    cmc233
    Participant
    6 pts

    图片第5行有个笔误,等式左边不应该是一个P(R^(-1) w),而是应该像右边一样是所有l阶SH的vector

    in reply to: [作业2]预计算结果中是否应该包含diffuse项 #8274 Score: 0
    cmc233
    Participant
    6 pts

    不好意思,把 = (*shCoeff)[j]看成*= (shCoeff)[j]了,源代码好像是没乘系数orz

    in reply to: [作业2]预计算结果中是否应该包含diffuse项 #8273 Score: 0
    cmc233
    Participant
    6 pts

    prt.cpp的preprocess()已经写了
    auto shCoeff = sh::ProjectFunction(SHOrder, shFunc, m_SampleCount);
    for (int j = 0; j < shCoeff->size(); j++)
    {
    m_TransportSHCoeffs.col(i).coeffRef(j) = (*shCoeff)[j];
    }

    in reply to: 【作业2】裙子是否需要双面渲染 #8272 Score: 0
    cmc233
    Participant
    6 pts

    嗯,只是看到裙底结果很奇怪,就想问问诸如衣服这种薄物(或者一般非watertight的模型)是不是游戏里都会双面渲染。

    至于伽马矫正,没有涉及到texture也需要伽马矫正吗?

    in reply to: 关于【作业1】的Bonus部分的疑问 #8060 Score: 0
    cmc233
    Participant
    6 pts

    更改一下,增加光源里,shader部分可能要有点小改动,例如新增一个#define NUM_LIGHTS 2.0,然后gl_FragColor = vec4(phongColor * visibility / NUM_LIGHTS, 1.0/ NUM_LIGHTS);这样blend的时候比较方便

    in reply to: 关于【作业1】的Bonus部分的疑问 #8059 Score: 2
    cmc233
    Participant
    6 pts

    增加光源:
    一个很简单的做法是直接在webglRender.js里,对于同一个mesh,用gl.blendFunc把不同光源下画出来的结果给blend就行了(需要先在loadOBJ.js里把每个mesh不同的light下的meshRender和shadowMeshRender存下来),shader部分完全不用动;
    比较麻烦的做法:改phongShader

    物体运动:
    在engine.js的mainLoop()里更新mesh的translation,再直接用buildShadowMaterial()和buildPhongMaterial()计算新的material,赋值给renderer.shadowMeshes[i].material和renderer.meshes[i].material(具体写法可以参考loadOBJ.js);其中buildPhongMaterial需要用的colorMaps,mat.specular可以在loadOBJ.js里加行代码存下来

    This post has received 2 votes up.
    in reply to: 给WpenumbraRatio乘上NEAR_PLANE / zReceiver效果更好 #8026 Score: 0
    cmc233
    Participant
    6 pts

    是啊,所以zReceiver = 500*coord.z+0.1*(1-coord.z)啊,你拿0.1/coord.z就没有意义啊(你下面的回复不是理解的挺清楚的吗,得在相机空间算距离比)。
    ps,如果你在计算距离比的时候没有转化到相机空间,那么你计算blocker depth里fliter size要乘的(zReceiver – NEAR) / zReceiver可能也有问题,你的结果看上去没问题只是因为你的NEAR取的是0.1,而场景范围里按(0.1,500)得到的coord.z都是大于0.1的

    in reply to: 给WpenumbraRatio乘上NEAR_PLANE / zReceiver效果更好 #8023 Score: 0
    cmc233
    Participant
    6 pts

    还有,突然想到,作业里shadow map推荐用的是正交投影,所以不会有“近大远小”;如果是用仿射投影的话,感觉这种想法是有道理的

    in reply to: 给WpenumbraRatio乘上NEAR_PLANE / zReceiver效果更好 #8022 Score: 0
    cmc233
    Participant
    6 pts

    你怎么归一化的nearplane?在0到1里,nearplane不是0吗?

    in reply to: 给WpenumbraRatio乘上NEAR_PLANE / zReceiver效果更好 #8019 Score: 0
    cmc233
    Participant
    6 pts

    代码里NEAR_PLANE/coord.z应该是NEAR_PLANE/(coord.z*FAR_PLANE + (1.0-coord.z)*NEAR_PLANE)吧?
    按作业里的场景布置,对于阴影区域来说,NEAR_PLANE / zReceiver应该蛮小的吧,再乘以这个系数,阴影会变得很硬?感觉你是不是因为NEAR_PLANE设置的是0.1左右,所以用0.1/coord.z才能得到一个比较合适的缩小?纯属胡乱猜测,如果你coord.z已经做了空间转换就当我啥都没说orz

    in reply to: [作业1]关于plane边界噪点的猜测与解决 #8011 Score: 0
    cmc233
    Participant
    6 pts

    一样的,本质都是将深度为0的背景判断出来。但是关于depth map背景深度是0这点感觉蛮奇怪的,看到的教程里绘制出来的depth map背景都是1(即背景都是白色)。感觉真正好的改法其实是在depth map存储时就将背景设置为1(这也符合逻辑,即没有object的地方深度最远),不过我对gl绘制是真地一点都不了解,看作业里的FBO.js和texture.js看得头秃,所以只能在调用depth map时增加判断把深度为0的当背景。

    in reply to: 作业1的正交矩阵参数的疑惑 #8000 Score: 0
    cmc233
    Participant
    6 pts

    估计填写,保证在light坐标系下,由(left, right, bottom, top, near, far)构成的盒子能够包含整个场景,从而渲染出完整的shadow map就行
    可以在phongVertex.glsl里令 gl_Position = vPositionFromLight;就可以可视化出shadow map渲染的范围

    cmc233
    Participant
    6 pts

    几何分布算的是第k次成功,这里对应的就是第k次不会再弹射了,实际弹射就是k-1

    cmc233
    Participant
    6 pts

    p/(1-p)

    Attachments:
    You must be logged in to view attached files.
    in reply to: 作业7的提高题踩得一些坑(慢更中) #5532 Score: 0
    cmc233
    Participant
    6 pts

    感谢科普,要不是这个讨论,我还不知道Cook-Torrance是啥orz

    in reply to: 作业7的提高题踩得一些坑(慢更中) #5530 Score: 0
    cmc233
    Participant
    6 pts

    我知道我俩沟通的问题在哪了。。。Cook-Torrance model和Microfacet model是两个不同的model,只是Cook-Torrance model的定义fr=kd*f_{Lambert}+ks*f_{cook−torrance}用到了microfacet,老师上课讲的microfacet只是单纯的microfacet吧

    in reply to: 作业7的提高题踩得一些坑(慢更中) #5529 Score: 0
    cmc233
    Participant
    6 pts

    为啥这张图里的材质不能直接当成microfacet?(虽然感觉microfacet在金属上用的多些

    in reply to: 作业7的提高题踩得一些坑(慢更中) #5528 Score: 0
    cmc233
    Participant
    6 pts

    不同材质模型加在一起当然能实现不同效果,可是,现在是要实现microfacet啊,而且,为啥一定要区分漫反射和镜面反射,对于microfacet来说,不就是崎岖的地和完全平滑的地吗

    in reply to: 作业7的提高题踩得一些坑(慢更中) #5524 Score: 0
    cmc233
    Participant
    6 pts

    emmm,我这个独立指的是,有了microfacet就不用再算Lambert,Phong了,因为看你前面打算把他们加起来(可能我原话用的diffuse和specular让你误解了orz),所有材质的本质不都是brdf,即光怎么反射嘛233

Viewing 30 posts - 1 through 30 (of 52 total)