渲染积累(Shader篇)

水波效果

过度写法:

u_mode = math.max(math.min(u_mode + distortionMode *  transitionSpeed, 1), 0)

handletouch:

//点击切换模式
distortionMode = distortionMode * -1

水波效果:

//顶点浮动偏移量
offset = 2.0 * sin(10.0 * (PI * .5 * uv.y) + time);
position.z += ((1.0 - u_mode) * offset) + 1.2 + abs(u_mode) * 1.5;
position.x += abs(u_mode) * (.25 * offset);

缩放旋转效果

//片段着色器中对采样点坐标进行变换
uv -= 0.5;
uv /= 1.5;
uv += 0.5;
//放大了1.5倍
//片段着色器中对采样点坐标进行变换
mat2 rotate2d(float _angle){
    return mat2(cos(_angle),-sin(_angle),
                sin(_angle),cos(_angle));
}
//随时间旋转
uv = rotate2d(iTime) * uv;

//漩涡
float dist = length(uv - pos);
uv = rotate2d(dist + time) * uv;

旋转矩阵过度

//将物体从当前方向以0.1的速率转向目标方向
local fromOrient = self.rootTransform:getWorldOrientation()
local up = Amaz.Vector3f(0,1,0)
local forward = Amaz.Vector3f(destCoord.x - self.birdCoord.x, 0.0, destCoord.z - self.birdCoord.z)
local newZ = forward / Amaz.Vector3f.magnitude(forward)
local right = Amaz.Vector3f.cross(up, forward):normalize()
up = Amaz.Vector3f.cross(newZ,right)
local toOrient = Amaz.Quaternionf.lookRotationToQuaternion(newZ, up)

local ratio = 0.1
local interOrient = Amaz.Quaternionf.slerp(fromOrient, toOrient, ratio)
self.rootTransform:setWorldOrientation(interOrient)

人像遮挡

遮挡物体:遮挡面片renderorder最小,且在场景中放在被遮挡物体前面。开启深度写入,只写入深度不写入颜色
在这里插入图片描述

float matting = texture2D(u_MattingTexture, sampling_uv).r;
//背景地方抛弃
if(matting <= 0.5)
  discard;

透明物体遮挡效果

被遮挡物体双通道
pass0:深度小于遮挡物体渲染,未被遮挡物体正常渲染
在这里插入图片描述
pass1:深度大于遮挡物体渲染,遮挡部分透明显示
在这里插入图片描述
开启混合模式,绘制透明部分在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值