SceneKit的水面效果

最近研究了一下SceneKit,发现很多很有意思的效果,这里干脆记录一下防止忘了。

因为是随手记的可能会比较乱(笑)

总之如果你对Scenekit有一点点了解的话就可以看了 (如果没有的话先看看教程吧)

第一个比较有意思的点是水面效果。

水面效果主要涉及材质这一方面,完全可以不使用swift/oc代码搞定,效果大概是这个样子

首先随便拉一个geometry(我用的是floor)

选择floor,然后打开材质菜单栏


Diffuse就是这个物体的底色,水面的颜色就用蓝色吧(当然,换个其他的颜色也不错,比如黄河水)

Metalness不用管,因为我们要渲染的是水(你要非渲染水银我也没办法,但是正常的水就跳过)

Roughness是粗糙程度,为了透明反射的效果我们用黑色

接下来是重头戏:Normal

Normal就是一个物体表面的波澜,如果我们要掀起波澜那就要整一个normal map(这个可以在搜索引擎上面找)

(里面的参数保持默认就可以)

Illumination,Emission和Displacement全部默认

然后我们要搞一个天空并设置成背景和环境(其实主要是要有云体现水面的折射,随便做一个就行了)(关于天空的构造有时间再说,嘿嘿)

Ok,是不是已经出现天空效果了

接下来是让我们的这一瓢死水动起来了

我有一个不太好的习惯,就是一次写不了太多字,先把代码贴这里,明天(也许?)再讲

float waterSpeed = u_time * -0.1;
vec2 uvs = _surface.normalTexcoord;
uvs.x *= 2;
vec3 tn = texture2D(u_normalTexture, vec2(uvs.x, uvs.y + waterSpeed)).xyz;
tn = tn * 2 - 1;vec3 tn2 = texture2D(u_normalTexture, vec2(uvs.x + 0.35 , uvs.y + 0.35 + (waterSpeed * 1.3))).xyz;tn2 = tn2 * 2 - 1;
vec3 rn = (tn + tn2) * 0.5;
mat3 ts = mat3(_surface.tangent, _surface.bitangent, _surface.geometryNormal);
_surface.normal = normalize(ts * rn);







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值