技术美术学习

图形流水线

在这里插入图片描述

unity shader

shader代码框架

在这里插入图片描述

描边shader

参考godot教程
https://www.bilibili.com/video/BV1fn4y1R7yg/?spm_id_from=333.1007.tianma.1-1-1.click&vd_source=fbcd575de84e243458321a7679e9b053
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

unity shader可以使用内置变量 {texturename}_TexelSize 访问纹理 2D 的特殊属性(自动获取),
所以在Properties中定义如下即可获取纹理宽度
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一个手写shader制作完成!

获取次级纹理,剑发光

在这里插入图片描述
在这里插入图片描述
_secondary参数与次级纹理的名字相同即可自动获取
在这里插入图片描述
发光的描边!!
在这里插入图片描述

shader graph

用户手册https://docs.unity3d.com/cn/Packages/com.unity.shadergraph@10.5/manual/

sample texture 2d节点

放在纹理变量之后,采样之后作为颜色输出
在这里插入图片描述

multiply节点 可用于颜色叠加,颜色乘以其他效果即可叠加

在这里插入图片描述

add节点 如果原贴图是黑色上面有一些其他颜色的点,就要用add节点,因为黑色rgb是0,0,0,乘其他颜色都会变成0,而用加法可以得到发光的部位

在这里插入图片描述

shader graph中不同材质选项fragment会有不同的block node

在这里插入图片描述
在这里插入图片描述

sine

在这里插入图片描述
sine函数输入值为某个通道的颜色,颜色取值范围为[0,1]
eg:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

normal from height

在这里插入图片描述
取法向量的贴图(制造凹凸感,左下角黑色和白色值差距从0-10,相当于高度差,那么经过normal from height,strength越大,波纹越明显)eg:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注:获取屏幕快照的camerasortinglayertexture变量需要取消勾选expose,否则获取不到当前屏幕快照

在这里插入图片描述

注:选择ripple物体的图片时需要选择独立的图片,不能选择一整张图片中sprite editor切割的图片,否则取到的屏幕快照会很多条纹

在这里插入图片描述

注:可以通过调整polar coordinates节点的center位置来调整后续波纹方向,比如控制水波方向,气波方向等

在这里插入图片描述
在这里插入图片描述

tilling and offset

注:本节点中的offset的x、y的范围是[0,1]

0表示当前屏幕像素点对应当前屏幕快照纹理同坐标的点,1表示偏移一倍的纹理尺寸,波纹案例中纹理是屏幕快照,所以当x为1时,显示的图案如下图:
在这里插入图片描述
y同理

解释:
图文详解Unity3D中Material的Tiling和Offset是怎么回事 https://www.cnblogs.com/bitzhuwei/p/explain-offset-and-tiling-with-Unity-and-3ds.html

normal from height生成法线贴图,如果是平面,则法线向量为(0,0,1),从而normal from height 的 out的三维向量中的(x,y)为(0,0),输入到tilling and offset则其贴图没有变化,若不是平面,则法线向量的xy不为(0,0),则输入到tilling and offset则其贴图offset发生变化,则会产生水纹效果
因为法线贴图

在这里插入图片描述

自建shader graph

水纹效果

由postfxmask.shader翻译为shader graph
在这里插入图片描述
shader graph如下
在这里插入图片描述
上图:
选择圆圈图片中的红绿通道作为后面偏移量的x、y值,因为shader graph中rgba范围都为[0,1],所以图中红绿在圆圈上的取值为[0,1],首先*_DistortIntensity,此系数在rippleeffect.cs中动态控制,如下图,之后对红绿通道分别0.001此时取值范围为[0,0.001_DistortIntensity],所以multiply中的预览图显示全黑(因为只有一个输入值,所以转换为黑白的颜色表示[0,1]之间取值)。
在这里插入图片描述
在这里插入图片描述
上图中,screen position选择default模式,返回当前点对应裁剪空间的位置,即屏幕位置
在这里插入图片描述
此操作对应原shader的此处
在这里插入图片描述
确定偏移量后,通过tilling and offset节点作为uv输入给屏幕快照截图纹理,最后输入给片断着色器的base color。
_CameraSortingLayerTexture的获取方法见上篇笔记。

注:scene position节点作为uv输出给后面sample texture2d节点,找到了当前物体对应屏幕的位置,如果不用scene position节点作为uv,效果如下图

在这里插入图片描述
当前物体会映射整个屏幕截图

注,本例中波纹大小与rippleeffect物体选择的图片大小一致

其原因为screen position返回当前物体中的点对应的在屏幕中的位置,而在rippleeffect.cs中又指定了当前物体大小为1倍大小,所以在编辑器中调整的scale也无效。
在这里插入图片描述

b站波纹效果bug

注:中心点设置bug

在这里插入图片描述
中心点设置参数需要暴露出去,否则默认为0,而非default中填的0.5,default中填的只是给shader graph界面预览的
如果没暴露,则会如下图
在这里插入图片描述
中心点相当于0,0

注:normal from height中的strength不能太小,否则会像上图那样,正确应该如下图

在这里插入图片描述

注:b站波纹shader获取不到屏幕快照bug

在这里插入图片描述
如上图,只有一个黑色方块
原因如下图
在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值