您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 胖纸_DHW 于 2021-2-3 14:33 编辑
想着是钻孔数据用三维柱状体显示,结果就做出这么个金箍棒。
没有C#代码,简单shader可行。
将参数显示出以便于程序控制,所以说需要定义属性:
- <div style="text-align: center;">Properties{</div><div style="text-align: center;"> _ColorRange1("Color1 Range", Range(0, 1)) = 0.3</div><div style="text-align: center;"> _ColorRange2("Color2 Range", Range(0, 1)) = 0.6</div><div style="text-align: center;"> _ColorRange3("Color3 Range", Range(0, 1)) = 0.7</div><div style="text-align: center;"> _ColorRange4("Color4 Range", Range(0, 1)) = 0.8</div><div style="text-align: center;"> _Color1("color1", Color) = (1.0, 0.0, 0.0, 1.0)//红</div><div style="text-align: center;"> _Color2("color2", Color) = (0.0, 1.0, 0.0, 1.0)//绿</div><div style="text-align: center;"> _Color3("color3", Color) = (0.0, 0.0, 1.0, 1.0)//蓝</div><div style="text-align: center;"> _Color4("color4", Color) = (1.0, 1.0, 1.0, 1.0)//白</div><div style="text-align: center;"> _Color5("color5", Color) = (0.0, 0.0, 0.0, 1.0)//黑</div><div style="text-align: center;"> }</div>
点击此处复制文本
剩下的基本上就是片段着色器的位置和颜色的控制,if-else足够实现.
代码:
- <div style="text-align: center;">Shader "Custom/aaa" {</div><div style="text-align: center;"> Properties{</div><div style="text-align: center;"> _ColorRange1("Color1 Range", Range(0, 1)) = 0.3</div><div style="text-align: center;"> _ColorRange2("Color2 Range", Range(0, 1)) = 0.6</div><div style="text-align: center;"> _ColorRange3("Color3 Range", Range(0, 1)) = 0.7</div><div style="text-align: center;"> _ColorRange4("Color4 Range", Range(0, 1)) = 0.8</div><div style="text-align: center;"> _Color1("color1", Color) = (1.0, 0.0, 0.0, 1.0)//红</div><div style="text-align: center;"> _Color2("color2", Color) = (0.0, 1.0, 0.0, 1.0)//绿</div><div style="text-align: center;"> _Color3("color3", Color) = (0.0, 0.0, 1.0, 1.0)//蓝</div><div style="text-align: center;"> _Color4("color4", Color) = (1.0, 1.0, 1.0, 1.0)//白</div><div style="text-align: center;"> _Color5("color5", Color) = (0.0, 0.0, 0.0, 1.0)//黑</div><div style="text-align: center;"> }</div><div style="text-align: center;"> SubShader{</div><div style="text-align: center;"> Pass{</div><div style="text-align: center;"> CGPROGRAM</div><div style="text-align: center;"> #pragma vertex vert</div><div style="text-align: center;"> #pragma fragment frag</div><div style="text-align: center;"> #include "UnityCG.cginc"</div> <div style="text-align: center;">
- </div><div style="text-align: center;"> float _ColorRange1;</div><div style="text-align: center;"> float _ColorRange2;</div><div style="text-align: center;"> float _ColorRange3;</div><div style="text-align: center;"> float _ColorRange4;</div><div style="text-align: center;"> fixed4 _Color1;</div><div style="text-align: center;"> fixed4 _Color2;</div><div style="text-align: center;"> fixed4 _Color3;</div><div style="text-align: center;"> fixed4 _Color4;</div><div style="text-align: center;"> fixed4 _Color5;</div> <div style="text-align: center;">
- </div><div style="text-align: center;"> //输入顶点结构体,包含位置和颜色</div><div style="text-align: center;"> struct vertexInput {</div><div style="text-align: center;"> float4 vertex : POSITION;</div><div style="text-align: center;"> float4 texcoord0 : TEXCOORD0;</div><div style="text-align: center;"> };</div><div style="text-align: center;"> //片段结构体,包含位置和颜色</div><div style="text-align: center;"> struct fragmentInput{</div><div style="text-align: center;"> float4 position : SV_POSITION;</div><div style="text-align: center;"> float4 texcoord0 : TEXCOORD0;</div><div style="text-align: center;"> };</div><div style="text-align: center;"> //顶点处理</div><div style="text-align: center;"> fragmentInput vert(vertexInput i){</div><div style="text-align: center;"> fragmentInput o;</div><div style="text-align: center;"> o.position = mul (UNITY_MATRIX_MVP, i.vertex);</div><div style="text-align: center;"> o.texcoord0 = i.texcoord0;</div><div style="text-align: center;"> return o;</div><div style="text-align: center;"> }</div><div style="text-align: center;"> //片段处理</div><div style="text-align: center;"> float4 frag(fragmentInput i) : COLOR {</div><div style="text-align: center;"> float4 color;</div><div style="text-align: center;"> if (i.texcoord0.y > 0 && i.texcoord0.y < _ColorRange1) {</div><div style="text-align: center;"> color = _Color1;//红色</div><div style="text-align: center;"> }</div><div style="text-align: center;"> if (i.texcoord0.y > _ColorRange1 && i.texcoord0.y < _ColorRange2) {</div><div style="text-align: center;"> color = _Color2;//绿色</div><div style="text-align: center;"> }</div><div style="text-align: center;"> if(i.texcoord0.y > _ColorRange2 && i.texcoord0.y < _ColorRange3){</div><div style="text-align: center;"> color = _Color3;//蓝色</div><div style="text-align: center;"> }</div><div style="text-align: center;"> if (i.texcoord0.y > _ColorRange3 && i.texcoord0.y < _ColorRange4) {</div><div style="text-align: center;"> color = _Color4;//白色</div><div style="text-align: center;"> }</div><div style="text-align: center;"> if (i.texcoord0.y > _ColorRange4 && i.texcoord0.y < 1) {</div><div style="text-align: center;"> color = _Color5;//黑色</div><div style="text-align: center;"> }</div><div style="text-align: center;"> return color;</div><div style="text-align: center;"> }</div><div style="text-align: center;"> ENDCG</div><div style="text-align: center;"> }</div><div style="text-align: center;"> }</div><div style="text-align: center;"> FallBack "Diffuse"</div><div style="text-align: center;">}</div>
点击此处复制文本
|