Unity的Shader學習筆記(09)[20/12/24_週四][33-36]

llhswwha發表於2020-12-24

課時33:VertexShader-幾何變換-頂點顏色變換1

1.根據模型座標設定顏色

            v2f vert(appdata_base v)
            {
                v2f o;
                if(v.vertex.x>0){
                    o.color=fixed4(1,0,0,1);
                }
                else{
                    o.color=fixed4(0,0,1,1);
                }
                o.pos=UnityObjectToClipPos(v.vertex);
                return o;
            }
            fixed4 frag(v2f IN):COLOR
            {
                return IN.color;
            }

2.設定某一個頂點的顏色

                if(v.vertex.x==0.5 && v.vertex.y==0.5 && v.vertex.z==-0.5){
                    o.color=fixed4(1,0,0,1);
                }
                else{
                    o.color=fixed4(0,0,1,1);
                }

3.根據世界座標設定顏色

                float4 wpos=mul(unity_ObjectToWorld,v.vertex);
                if(wpos.x>0){
                    o.color=fixed4(1,0,0,1);
                }
                else{
                    o.color=fixed4(0,0,1,1);
                }

這裡可以擴充套件成根據世界座標中的一個平面的座標來改變這個Shader裡面的顏色變化的判斷值。

和剖切有點像了

可以把顏色改成透明的嗎

4.根據時間變化顏色

                if(v.vertex.x==0.5 && v.vertex.y==0.5 && v.vertex.z==-0.5){
                    o.color=fixed4(_SinTime.w/2+0.5,_CosTime.w/2+0.5,_SinTime.y/2+0.5,1);
                }
                else{
                    o.color=fixed4(0,0,1,1);
                }

---------------------------------------------------------------

課時34:VertexShader-幾何變換-頂點顏色變換2

1.基於螢幕座標設定顏色

                o.pos=UnityObjectToClipPos(v.vertex);
                float x=o.pos.x/o.pos.w;
                if(x<=-1){
                    o.color=fixed4(1,0,0,1);
                }
                else if(x>=1){
                    o.color=fixed4(0,0,1,1);
                }
                else{
                    o.color=fixed4(x/2+0.5,x/2+0.5,x/2+0.5,1);
                }

Game和Scene分別渲染,結果不同。

2.座標範圍,光帶

 

 

 

相關文章