【游戏技术群】959392658  【游戏出海群】12067810
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   18803836360

2

个人分类: shader | 2018-10-9 17:21
当尝试把上一个例子中的widthStrip改为500,之后再全屏显示,就能看到白色与红色的显示范围发生了变化。
由于我们设置了一个绝对的像素阈值,而不是一个相对比例,那么在改变显示分辨率的情况下就会导致效果不同
(这种问题经常出现在app移植到不同平台(各个平台分辨率不同)而出现不尽人意的效果)。 
在这篇文章提到过,shader中有一个iResolution的输入值,这个值存储了当前显示分辨率下的像素长度与宽度,
比如拿我的电脑来说,当全屏显示时,iResolution.x代表了长度1920,iResolution.y代表了宽度1080。 
当显示分辨率不改变的情况下,iResolution.xy是一个固定值。
iResolution : 当前显示屏幕的分辨率。拿我自己的电脑(显示屏分辨率为1920*1080)举例,例如现在的显示窗
口处于全屏状态,
那么iResolution.x和iResolution.y 就分别为1920和1080,以像素为单位。
iGlobalTime:当前shader开始运行的时间,以秒计时。
iTimeDelta:每帧渲染时间,以秒计时。
iFrame:shader回放帧(这个不是很明白),具体举一个例子就是:我们要播放一个图形移动动画,并且动画有100帧,那么将iFrame/100,能够得到一个0~1的值,可以把它认为是我们动画播放的速度,在这个基础上对图形坐标移动,那么就可以做出图形位移的效果。(参考例子)
iChannelTime[4]:针对于我们四个输入通道,每个通道的回放时间,以秒计时。
iChannelResolution[4]:四个输入通道的分辨率,以像素为单位。
iMouse:获取鼠标位置,xy分量取得当鼠标浮动的坐标位置,zw获得鼠标点击时的坐标位置。
iChannel0..3:获得四个通道对应的输入。
iDate:xyzw分别对应年月日时间,以秒为单位。
iSampleRate:音源采样率。


距离中心的距离,从外部传入时间参数,由中心向外扩散
正常(normal),即透明度混合
Blend SrcAlpha OneMinusSrcAlpha 

//柔和相加(soft additive)
Blend OneMinusDstColor One;

//正片叠加(Multiply),即相乘
Blend DstColor SrcColor

//两倍相称(2x Mul)

//变暗(Darken)
BlendOp Min
Blend one one 

//变亮(lighten)
BlendOp Max
Blend one one 

//滤色(screen)
blend oneMinusDstColor One

//等同于
blend one oneMinusSrcColor

//线性减淡(linear dodge)
blend one one 

这里刚开始用了saturate,结果怎么都不显示双面,折腾了好久,师傅告诉我,saturate不是这么用的 
saturate返回是0到1,而小于0的时候,也就是物体的背面,他永远是返回0

abs 返回的是绝对值,他才可以把物体背面的法线由负方向变成正常向 



在渲染流水线中,我们往往需要把一个点或方向矢量从一个坐标空间转换到另一个坐标空间。
而定义一个坐标空间,需要指明原点和3个坐标轴方向。而这些数值实际上是相对另一个坐标空间的。
举个例子,我现在坐在屋子的东南角,这是以屋子中心为原点,方位朝向为坐标轴的。
但我的屋子在大楼的四层西北方向,那如何以大楼为空间描述我的位置呢。
所以坐标空间会有一个层次结构,每个空间都有一个父空间。对坐标空间的变换实际上
就是在父空间和子空间之间对点和矢量进行变换。
再次,在对方向矢量的空间变换中,我们不关心其位置所在,所以原点没有意义,三维表达式就够了,所以方向矢
量的变换矩阵为:
a、模型空间 (model space)

也叫对象空间(object space)或局部空间(local space)。每个模型都有自己独立的坐标空间,当它移动或旋转时,
模型空间也会跟
着移动和旋转。在模型空间中,我们常使用一些方向概念,例如“前(forward)”、“后(back)”、“左(left)”、“右(right)”、
“上(up)”、“下(down)”。Unity在模型空间使用的是左手坐标系,所以+x、+y、+z轴分别对应模型的右、上、
前。而模型的右上前是由我们的美工人员制作模型时定好的。

b、世界空间(world space)

相对于模型空间,世界空间是模型所在的最外层的父空间。Unity中,世界空间同样是左手坐标系,原点是游戏空间的
中心,x、y、z轴固定不变。顶点变换的第一步,是将顶点从模型空间变换到世界空间。这个变换叫模型变换
(model transform)。在Unity中,我们看到模型的Transform组件里的位置旋转和缩放,都是基于它的父节点(
parent)的,当模型没有父节点时,那这个Transform就是基于世界空间的。变换过程用下面的公式就可:
0 0

作者的其他最新博客

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号

个人分类

标签

阅读排行

评论排行

推荐博客

最新博客

返回顶部