感慨下AI发展的速度,顺便提供一个3.X版本sprite替换指定颜色的变色shader

半年多以前有个图片指定颜色变色的需求,因为不熟悉shader相关知识只能在网上找,当时用AI写的完全不能用,要么是直接报错要么就是和需求不搭边,然后通过谷歌、百度、github、论坛也没找到符合需求的,最后只能向技美朋友求助帮忙解决了,虽然需求并不复杂但是对于没有相关知识基础的人来说真是两眼一抹黑。
今天突然又想起之前的这个需求,结果用AI调教了几句就得到了符合需求的shader。这还是cocos相关的问题,对于unity和ue的匹配支持度估计更高…回头想想从ChatGPT发布到现在不过两年而已,发展速度真是日新月异。

下面提供下AI写的变色shader,tolerance为颜色匹配的容差值。

CCEffect %{  

  techniques:  

  - passes:  

    - vert: sprite-vs:vert  

      frag: sprite-fs:frag  

      depthStencilState:  

        depthTest: false  

        depthWrite: false  

      blendState:  

        targets:  

        - blend: true  

          blendSrc: src_alpha  

          blendDst: one_minus_src_alpha  

          blendSrcAlpha: src_alpha  

          blendDstAlpha: one_minus_src_alpha  

      rasterizerState:  

        cullMode: none  

      properties:  

        alphaThreshold: { value: 0.5 }  

        targetColor: { value: [1.0, 0.0, 0.0, 1.0], editor: { type: color } }  

        replaceColor: { value: [0.0, 1.0, 0.0, 1.0], editor: { type: color } }  

        tolerance: {  

          value: 0.1,  

          editor: {  

            type: float,  

            range: [0, 1.0],  

            step: 0.001,  

            slide: true  

          }

        }

}%

CCProgram sprite-vs %{  

  precision highp float;  

  #include <cc-global>  

  #if USE_LOCAL  

    #include <cc-local>  

  #endif  

 

  in vec3 a_position;  

  in vec2 a_texCoord;  

  in vec4 a_color;  

 

  out vec2 v_uv;  

  out vec4 v_color;  

 

  vec4 vert () {  

    vec4 pos = vec4(a_position, 1);  

    #if USE_LOCAL  

      pos = cc_matWorld * pos;  

    #endif  

    #if USE_PIXEL_ALIGNMENT  

      pos = cc_matView * pos;  

      pos.xyz = floor(pos.xyz);  

      pos = cc_matProj * pos;  

    #else  

      pos = cc_matViewProj * pos;  

    #endif  

    v_uv = a_texCoord;  

    v_color = a_color;  

   

    return pos;  

  }  

}%  

CCProgram sprite-fs %{  

  precision highp float;  

  #include <embedded-alpha>  

  #include <alpha-test>  

  in vec2 v_uv;  

  in vec4 v_color;  

  #pragma builtin(local)  

  layout(set = 2, binding = 11) uniform sampler2D cc_spriteTexture;  

  uniform Constant {  

    vec4 targetColor;  

    vec4 replaceColor;  

    float tolerance;  

  };  

  vec4 frag () {  

    vec4 o = texture(cc_spriteTexture, v_uv);  

    o *= v_color;  

   

    // 只在不透明的地方进行颜色替换  

    if (o.a > 0.0) {  

        float diff = length(o.rgb - targetColor.rgb);  

       

        if (diff < tolerance) {  

            float lerpFactor = 1.0 - (diff / tolerance);  

            o.rgb = mix(o.rgb, replaceColor.rgb, lerpFactor);  

        }  

    }  

   

    ALPHA_TEST(o);  

    return o;  

  }  

}%

效果图
image image
image

1赞

你才发现啊,未来技术不是瓶颈了ai拉近了甚至最终抹平大佬和菜鸡的差距,尽快搞钱别钻技术牛角尖,因为ai会降维打击

哈哈,虽然对AI的发展有预期,但只有切实改变自己生活的时候才会有更真实的感受吧。半年前还写不了shader,半年后就已经可以定制了。未来估计书本上的东西不值钱了,主要看的是灵感和创意。智力有AI,体力有机器人,再过个10年20年还真不敢想象生活和社会会变成什么样子。 :joy:

错了吧,有AI,技术牛角尖才更珍贵,否则直接被AI取代

1赞

引领ai发展的顶级大佬那没话说,剩下98%的人钻不过ai :joy:, 我在扯淡我也不懂但是就是这样感觉的

像约翰卡马克这种顶级大佬肯定还是珍贵,只是和99.9%的普通人没啥关系

大家都用上了AI,那跟以前还是一样啊,又在同一起跑线上了。就跟以前会不会用搜索引擎一样。所有人的开发效率都一起提升了。 :rofl:,希望能带动科技进一步突破,让大家都生活更便利。

几年没写代码了。今天用Unity写代码。 看看AI。确实牛逼。代码很多可以使用。但是有的部分需要自己修改。

AI会拉近普通程序员和菜鸟的差距

拉开大佬和普通程序员的差距

1赞

确定不是你自己先提高了吗?菜鸡+AI=菜鸡互啄;大佬+AI=互相调教+进步;

1赞

很多时候,我们在讨论 AI 的时候,总是喜欢假设:技术不好+AI 去和 技术大佬对抗。 有没有想过, 技术大佬有可能更喜欢用 AI 呢?

如果我们盘点一下,会发现,无非就四种人。

  1. 技术好,用AI
  2. 技术不好,用AI
  3. 技术好,不用AI
  4. 技术不好,不用AI

最后你会发现, 1 > 2 > 3 > 4 。
所以,总的来说, 技术基础依然重要,特别是在近10年 AI 还不够成熟的时候。随着 AI 的发展,动手类的技术会被弱化,但基础原理依然不会变。

人和AI 的协同,我认为是乘法。 公式大概可以理解为:

综合实力 = 基础分(人) * AI 加成

从现在开始,理解 AI,使用AI,掌握AI。

3赞

楼主这个shader连入门级都算不上,属于胎教级。还有个楼层在开发几十年前的洛克人横版,还大部分能用就连连夸赞。
说真的个人挺反感AI吹的。
当前AI还只能做一些片段工作,开发者必须有绝对的修复和扩展能力。什么时候给ai形容好做一个什么样的游戏,ai能做一个zip包,解压就能玩,UI和建模都能给你做了,那AI就真的吹爆了。
事实是现在ai根据图片建模还在beta阶段。
当你真的做一个大型项目,只给AI形容好需求的功夫,就耗费不少精力,更何况,你表达了N久的需求,AI能保证完美解决你的任务吗?
AI只会拉低门槛,让小学生也有开发游戏的可能。
冷静客观,这才是专业技术论坛该有的性格。

3赞

:laughing:当Ai程序继续变强的时候程序员就升级为代码审核,当ai能独立完成程序美术策划等任务时就升级为制作人探索独立开发3A游戏,当人人都能独立开发3A游戏就试试独立开发npu架构,当人人都能独立开发npu架构就挑战下独立完成1光年宇宙飞船设计,当人人都能造飞船可以探索独立发展星际商业,当人人都在宇宙星座开星际商场探索下能否探索四维世界,希望Ai发展的能再快一点能借Ai之力继续探索未知的未知,新的目标是星辰大海诗与远方

有点歪楼了,怎么变成人VSAI了。这个贴子的本意更想表达的是感慨或者安利。 :sweat:

有人接受不了也正常,中国有句古话叫不见棺材不落泪,不到黄河不死心 :thinking: :thinking: :thinking:

是的,目前AI的发展只是萌芽阶段,很多时候都需要人工的干预和审核,等AI技术发展的足够成熟、能够足够信任后,那么技术广度的重要性就会大于深度。当然这一切都建立在有一定基础上,不会提问的小白肯定发挥不了AI的作用。

AI肯定还是不如专业的技术解决方案或者文献的,AI本来就是一种搜索引擎,可以用AI搜索出关键字再用GOOGLE搜准确的解决方案,或者不用AI自己直接能搜索到解决方案。
你能用AI搜到的方案,网上是肯定有解决方案的,你半年前找不到无非还是没找到答案,google搜glsl color replace有很多方案,而且AI这方案带IF,google的回答推荐比如直接用diff和tolerance加上step函数之类的把lerpFactor计算成0,可能比加一个IF判断效率高。当然我没测过,也并不保证效率肯定比if高,可是stackoverflow回答里面有说到性能,你就会考虑到要去做测试

我这里强调的并不是难度高低,而是发展的趋势。如果一直有关注国内外最新AI技术和实际使用,就能发现AI从高级搜索引擎->能听懂人话但能力有限->能自己分析思考解决部分问题,我现在使用的Claude 3.5 sonnet也和以前使用的GPT在编码能力上有很大提升。而且AI即使处于现在的萌芽阶段也开始改变我们的工作生活,比如我上家公司就优化掉大半游戏原画,只留了几个会AI的原画美术,现在这家也利用训练的客服模型优化掉了80%的游戏客服,还有公司今年新出的游戏绝大部分游戏素材都是AI生成的,目前身边的程序同事也多多少少都有使用AI。就像墨菲定律所说,只要这件事有概率发生,一直去做就一定会发生,AI发展成熟也不过是时间问题。我这篇贴子也没有吹捧,只是感慨下自己实际使用中AI的变化,拥抱前沿技术还是有必要的。

认可。基础依然重要,没有基础,你使用不好AI。Ai可以理解为工具,基础是使用这个工具的说明书。

把饭喂嘴里也是AI的能力之一了。 :joy:
现在AI还不够成熟,提供的解决方案是否是最优解确实还得人工考量。不过说AI是搜索引擎这一观点我不太认可,如果是一些老旧AI或者国内AI确实用起来和搜索引擎没太大差别,一些最新的付费AI使用起来还是能明显感觉到是具备一定思考能力的。