假如你有一点编程基础
假如你有一点高中数理化基础
假如你读过“大学”
假如你工作过几年
假如你用过几个月Unity3d
假如你对计算机渲染有兴趣
假如你知道opengl,shader,图形学等
假如你懂得上面这么多。。。。。
你是不用往下看的。。。。。
Shader实战的几件事情
1.颜色抓取器(可判断Shader值)
2.Shader编辑器(不存在的,能.txt写程序最好)
3.快速获取模型和noise等贴图
4.一个靠谱的项目工程
这里,我用了国外的一个“卡通画”工程
0.Camera需要开深度空间:
camera.xxxx = xxx.Depth;
1.拖几个物件,建立1个小水坑,加上一个水的“平面”物件
2.建立一个空的Unlit Shader,和material,附加到水的“平面”物件
3.Shader,填入
//inside vert struct //在vert结构声明 写的代码
screenPos: TEXCOORD2
//inside vert shader //再顶点shader部分 写的
o.screenPos = ComputeScreenPos(o.vertex);
4.然后,再frag shader,写
float existingDepth01 = tex2Dproj(_CameraDepthTexture,UNITY_PROJ_COORD(i.screenPos)).r;
float existingDepthLinear = LinearEyeDepth(existingDepth01);
float depthDifference = existingDepthLinear - i.screenPos.w;
正文从这里开始(这里只是入门和实战,建议按上面步骤操作一次,不用怕,不会很深讲解理论知识,操作到这里,就只会再操作一两步骤,很快完事)
假如,上面的步骤操作正确,你会看到
5.还是,再frag shader
float waterDepthDfference01 = saturate(depthDifference / _DepthMaxDistance);
重点是,一个数再除以一个可以无限大的分量,作用是??
作用就是把1个原来值的最小值,再无限缩小,(0.1 -> 0.01)。计算机图形学,有点意思
//完整工程,相当于上面的靠谱工程项目