学了一段时间了,中间特效就先跳过啦。

还是先试试看卡通渲染时如何实现的吧。

哈吉马路哟~

这套课程应该是根据下面这个制作的,以后忘了可以去看看。

【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(1) – Trace0429 – 博客园 (cnblogs.com)

前期准备,我们先来看看各个贴图的作用。

Base Map:嗷tga格式的还不能上传诶,总之basemap就是给定了角色的基础色,它的alpha通道,用于区分皮肤区域。

SSS Map:与base差不多,但它是暗部的颜色,而上面的是亮部的颜色,它的alpha待定

ILM:这个贴图就比较抽象了,原因在于他把信息都分通道存储着。

R通道:控制高光强度。不需要高光的地方就全黑!

G通道:控制NdotL光照的偏移值。

B通道:控制高光范围的大小(类似光滑度)

Alpha通道:记录了模型的内描线

Detail Map:记录一些细节,但没那么精细,感觉我的detail map贴出来不对劲,后续再看看会不会影响效果。

顶点颜色

R通道:AO,自身对环境光的遮挡

G通道:好像没作用

B通道:有些作用,后续拓展

前期准备就是这样啦,之后有时间补充一下背景的实现。

嗷,课上有时间,就先来把背景的shader贴一下,背景分为两部分,天空球和一个平面,平面的纹理由天空盒的反射纹理再做个镜面得到,纹理由脚本获取,需注意纹理命名在脚本和shader里须一致。

平面的shader挺简单的,

这里面有个非常常见的i.screen_pos.xy/i.screen_pos.w,之前都混过去了,现在去查了一下。具体的贴下面了。

在Unity中的Shader中,i.screen_pos.xy表示屏幕空间中的片段(像素)的位置,而i.screen_pos.w表示屏幕空间中的片段的透视除法分量。i.screen_pos.xy / i.screen_pos.w 结果就是在裁剪空间(Clip Space)中的位置。

通过使用 i.screen_pos.xy / i.screen_pos.w,你可以获得在屏幕上的坐标,而不是在裁剪空间或标准化设备坐标中的坐标。这在一些特定的效果和计算中可能会有用,比如屏幕空间的图像后期处理或特效。

总之应该是这样才能获取到真正的屏幕上的坐标吧,感觉上面写的还是挺模糊的,我日后再看看。

这边获取到的screen_uv为-1,1范围,转换到0-1即可。

后面就到了天空球的部分。

比较复杂,大佬也没有细讲,大概有一个非常高深的雾效,加上贴图和一个noise的扰动。

前期的准备工作就先到这吧。

您必须 登录 才能发表评论