mc光影吧 关注:8,603贴子:130,396
  • 18回复贴,共1

[求助] 有无大佬知道如何移植chocapic13 v6的lens flare

只看楼主收藏回复

有无大佬知道如何把chocapic13 v6的lens flare和阳光穿过树叶的丁达尔效应移植到complementary,自己折腾了两个月没研究明白



IP属地:山东1楼2024-10-09 11:03回复
    找论坛去问


    IP属地:湖南来自Android客户端2楼2024-10-09 12:36
    回复
      能做,但是麻烦,因为不同光影写法不同,迁移成本比较大


      IP属地:辽宁来自Android客户端3楼2024-10-09 16:36
      回复
        complementary跟bsl有亲缘关系,把chocapic移植过去的难度较大


        IP属地:北京来自Android客户端4楼2024-10-15 20:27
        回复
          我弄出来的是这样的,中心不在太阳上而是在太阳周围的一小块圆形区域里动,然后光线和镜头没有对齐,有没有大佬教一下到底应该怎么弄啊可以有偿,真的很喜欢这个镜头光晕


          IP属地:山东5楼2024-11-08 06:32
          回复
            最新进展,太阳不乱跑了,但屏幕中心和太阳的轴线没有对齐,经过比对发现中心在等比缩放后右上角四分之一的区域,目前猜测是aspectRatio这个变量的问题



            IP属地:山东6楼2024-11-19 06:47
            回复


              IP属地:山东7楼2025-01-12 17:17
              回复
                试了一下好像问题不大吧。。。。

                太阳乱跑是这个ntc2的问题,c6默认是texcoord * 2.0 - 1.0,把*2.0 - 1.0去掉就行。
                下面加个判断天空,如果是陆地就把sunmask赋值为0,避免陆地的背面被穿过渲染。
                然后sunmask*小一点,不然像核爆一样。
                如果需要仅在白天出现,夜晚关掉,就在我*0.3前面加个
                sunmask *= clamp(dot(sunVec, upVec) + 0.0625, 0.0, 0.125) / 0.125;

                下面这个lenslc给它注释掉,下面*了这个lenslc的也给删掉。然后调用就ok了

                目前我只能告诉你到这里了,至于超出陆地区块范围的天空背面光晕也会被渲染这个问题自己去研究下吧。


                IP属地:广东8楼2025-01-13 12:56
                收起回复
                  随机采样太阳中心周围的点,计算被遮挡和未被遮挡的像素点数量的比值作为sunmask,成功实现光晕强度根据地形遮挡程度渐变
                  const int NUM_SAMPLES = 16;
                  const float SAMPLE_RADIUS = 0.04;
                  float visibility = 0.0;
                  for(int i = 0; i < NUM_SAMPLES; i++) {
                  float random1 = fract(sin(float(i)*12.9898) * 43758.5453);
                  float random2 = fract(sin(float(i)*78.233) * 43758.5453);
                  vec2 offset = vec2(
                  (random1 * 2.0 - 1.0) * SAMPLE_RADIUS,
                  (random2 * 2.0 - 1.0) * SAMPLE_RADIUS
                  );
                  vec2 sampleCoord = lightPos + offset;
                  float sceneDepth = texture(depthtex1, sampleCoord).r;
                  visibility += step(1.0, sceneDepth);
                  }
                  visibility /= float(NUM_SAMPLES);
                  bool inBounds = all(greaterThan(lightPos, vec2(-0.12))) &&
                  all(lessThan(lightPos, vec2(1.12)));
                  float sunmask = visibility * float(inBounds && isEyeInWater <= 0.1 && blindness == 0.0);




                  IP属地:山东9楼2025-02-12 04:49
                  回复