效果:
教程链接:传送门:)
原理
基本
unityshader可以对材质贴图进行编辑,在在片元着色器中检测到顶点BrushPos小于BrushSize的顶点颜色修改位BrushColor。
笔尖位置发出一条射线,检测碰撞点,将点渲染到贴图上(将笔刷有关信息传入shader)
保存上一帧、当前帧、画布材质,在三者之间进行切换更新。
优化
移速过快会造成点阵距离过大不够流畅,于是在相距大于BrushSize的两个点之间进行插值补足空隙。
Shader
Shader "Brush/MarkPenEffect"
{
properties{
_MainTex("Texture",2D) = "white"{}
_BrushPos("BrushPos",Vector) = (0,0,0,0)
_BrushColor("Brush Color",Color) = (1,1,1,1)
_BrushSize("Brush Size",float) = 0.01
}
Subshader{
Tags{"RenderType" = "Opaque"}
pass {
CGPROGRAM
#pragma vertex vert;
#pragma fragment frag;