网上关于chatgpt的传言有很多,有两个极端,一派认为非常有用,以后程序员都要下岗。另一派认为屁用没有。
今天我打算用一个事实的例子,来演示一下chatgpt到底有没有用。
我尝试用10分制来总结每个问题,如果这其中chatgpt有帮助。我们就会写4:6, 或者 5:5,后面那个数表示chatgpt的贡献。
问题是这样的。在three js中,outline的pass对边框部分是没有深度上的特殊处理的,如果直接显示outline的结果当然没问题,但如果把outline pass的输出仅作为一个中间结果,还要和别的render target中的结果进行合并,那么outline的部分就会因为深度的问题被挡住。因此,我们需要将outline的边框部分的深度自定义为0,即最靠近镜头。
那么对于问题本身,chatgpt的贡献是0。也就是说,发现问题的过程,是开发和PD的问题,如果开发和PD提不出问题,那么chatgpt是帮不上任何忙的。也就是
1,问题本身 10:0
那么,通过搜索文档,我们发现自定义shader有一个约束,即如果你想写深度,那么全屏的深度就必须都要写,不允许只写部分像素的深度。
关于shader的这个限制,不管你怎么和chatgpt对话,chatgpt都不太可能主动的去提示你有这个限制,chatgpt是会给你一些shader的示例代码,但你会有疑问,为什么不能写成
if (xxx) {
gl_FragDepth = xx;
}
的形式,而必须写成
if (xxx) {
gl_FragDepth = xx;
} else {
gl_FragDepth = yy;
}
的形式。
所以在这个问题,chatgpt的帮助不大,顶多算1分。即
2,shader中关于写入depth的限制,9:1。这里chatgpt对解决问题并不能帮上什么忙。
好,下一个难点。当我们真的把pass参数中的readBuffer中的depth拿来使用,写出类似如下的代码
if (是边框) {
gl_FragDepth = 0;
} else {
gl_FragDepth = readBuffer中depthTexture的深度;
}
你会发现,这代码根本不起作用。边框的深度并没有被改成0.
这时候,你需要进行各种排查。比如直接没有分支,gl_FragDepth = 0; 这么写是有效的。多试几次你就会发现,真正的问题在于。这个shader的输出也是readBuffer,输入出是readBuffer。GPL并不允许这种写法。也就是说同一个renderTarget不能同时作为输入和输出。
OK, 在这个问题的排查过程中,chatgpt还是帮不上什么忙。因为你几乎无法让chatgpt写出这种问题代码再问他为什么不能执行。你也很难去描述清楚你这个代码遇到的情况。所以在这个问题上,chatgpt再次得0分。
3, 某个renderTarget在shader中不能又当输入又当输出。10:0。chatgpt帮不上忙。
好,当你明白了这个点,你终于找到一个完美的问题去询问chatgpt,即
three js depthTexture deep clone
显然,chatgpt对这个问题就很满意,它马上给出了一段代码作为答案,我把这段代码全部贴出来。
大家看完这段代码有什么感想?我把最终我们应用的代码出贴出来
可以看到,对chatgpt给出的答案,我们还需要进行总结,掌握其核心思想,即想deep clone一个texture,需要使用有点绕弯的作法,即多进行一次渲染。在掌握了这个核心思想后。渲染的细节我们要根据自身代码的情况进行重新安排。比如这里我们使用了一个全局级别的rendertarget,并且省略了部分代码。
在这个问题上,可以说chatgpt贡献了解决问题的核心思路。但是作为程序员,依然不可能完全照抄chatgpt的结果,还是需要根据实际情况进行优化调整。所以这个问题,我觉得可以3:7分。即chatgpt的贡献占主要部分,程序员的总结占次要部分。
4, 具体如何deep clone一个texture。3:7。chatgpt终于给力了一回。
好了,观察整个问题的解决过程。如果把整个过程分成4步:即 1,提出问题,2,初步分析问题。3,具体分析问题。4,针对具体问题找解法。chatgpt在40分中得到了8分,也就是说,优秀的程序员依然贡献了总工作量的4/5。而chatgpt确实替代了1/5的工作。
以上这个比例也是我目前认为的一个比较公正的比例,即:优秀的程序员的逻辑思维能力依然是必不可少的。而chatgpt仅在问题相当明确的前提下可以给出靠谱的答案。
很多人看到chatgpt居然可以仅凭几个单词的提示就写出大段的代码,就认为其替代了程序员的工作。这未免太小瞧了程序员的思考的价值。毕竟,在写程序这个领域,提出问题远比解决问题来的困难,而提出问题也比解决问题本身提供了更多的社会价值。
不过从另一个角度,也可以说,如果一个程序员只懂得在问题非常明确的前提下去cc cv代码。那么这个程序员确实是可以被chatgpt取代大部分的工作的。只能说脑子还是要多动一动,不然被AI取代也不是句空话。