五斗米弯腰

:warning: 声明,如果有任何侵权或者写错别字,讲错话等违法或非违法行为,请先冷静,不要联系 麦德姆或德姆,都好商量。在冲量,不xi轻喷。:dog::dog::dog:

在 Cocos Creator 2.4 里面尝试下 Matcap

( 定场诗一首,给自己压压惊,抽刀断水水更流,举杯脚臭脚更chou )

Matcap ( Material Capture ) 应该是个很古老的技术了,知乎上这两个大佬一位提供了实现,一位提出了优化。第一位大佬提供了用工具生成纹理的方案,建议如果有需要的话,可以看看,第二位的貌似就细节调优了,一般人应该也看不到,不重要。:dog:。其实这个东西还是挺好用的,美术可以控制,开发也省事,做些简单的静态一点的东西还口以把。

https://zhuanlan.zhihu.com/p/347947799;https://zhuanlan.zhihu.com/p/57775690

这里主要说下在 Cocos 2.4 里面怎么搞

  1. 首先要准备个有 vertex、frag的shader,附件里面有,具体也不难代码搬运工一下就有了( 这里面用的是 半兰伯特,感觉还可以把,复杂了俺也不会弄 )
  2. vert里面算一下 Capture 的纹理坐标,具体的实现附件里面也有

贴点代码,这个流程是固定的,其实俺理解是类似一个解码的过程,把用工具写在纹理里面的东西还原出来

vert() {

// 放到frag里面应该也可以,Unity3D有个优化版本用切线优化的部分貌似就放到frag里面了

// 要是有大佬准备指导一下,很高兴指导下俺

vec3 worldNorm = normalize(cc_matWorld[0].xyz * In.normal.x + cc_matWorld[1].xyz * In.normal.y + cc_matWorld[2].xyz * In.normal.z);

worldNorm = mat3( cc_matView ) * worldNorm;

v_capUV.xy = worldNorm.xy * 0.5 + 0.5;

}

frag() {

// 这里就比较简单了, 2.0 和 - 1.,以我现在的水准,理解是经验值,用来让纹理看上去好看一些用的,如果不用纹理就纯色的话,( 裸的几何体还挺适合纯色的 )

// 要是有大佬准备指导一下,仍然很高兴指导下俺…

matcapColor.rgb = finalColor.rgb + (matcapColor.rgb * 2.0) - 1.;

}
MatCap一些相关的东西.zip (62.2 KB)
附件会放一下 shader 和一个:lion: 的模型和几张引用的现成纹理( 狮子和这些纹理是引用的,可能有版权 ),放到项目就能看到效果, 最后上个效果把( 其实有个疑问,2.4没有天空盒么?)
e2aa3223-376a-4e55-b39a-7d6c830b06e6
***** 那就这样吧。。。:rose::rose::rose:

4赞

是个大佬鉴定完毕!

得使劲喷你,大佬写的真好11_329032bb09f3b4ae3cc423dc7a682e43

不明觉厉,mark~