unityshader自己学习笔记--基础知识--固定管线刨析

固定管线

基础框架

首先得到一个这样的基础框架

Shader "Custom/NewSurfaceShader"
{
    SubShader
    {
    
    }
 
}

加颜色

然后加个颜色试试

Shader "Custom/NewSurfaceShader"
{
    
    SubShader{
    pass{
        color(1,1,1,1)

    }
    }
 
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NZ2ZphVA-1681326214556)(image-20230311175406586.png)]

外部改颜色

需要注意,如果想将外部的颜色直接赋值给shader的color,要使用【】而不是()

Shader "Custom/NewSurfaceShader"
{
    Properties{
        _Color("MainColor",color)=(1,1,1,1)
    }

    SubShader{
    pass{

        color[_Color]
       
         }
    }
 
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dpFtZgz6-1681326214557)(image-20230311182729189.png)]

此时虽然可以改颜色,但是看起来只是个简单的二维球形

漫反射diffuse

给材质加上漫反射光

Shader "Custom/NewSurfaceShader"
{
    Properties{
        _Color("MainColor",color)=(1,1,1,1)
    }

    SubShader{
    pass{

        material{
            diffuse[_Color]
        }
    }
    }
 
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MqgyYKg-1681326214557)(image-20230311183648414.png)]

此时发现无论改什么颜色,球体都是纯白色

再加上这样一句代码

material{
            diffuse[_Color]
        }

        Lighting on

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A37KcIW2-1681326214558)(image-20230311184036433.png)]

此时所看到的颜色就是物体自身的颜色

环境光ambient

给材质加上环境光

  pass{

        material{
            diffuse[_Color]
            ambient[_Ambient]
        }

        Lighting on
    }
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G56lZnHf-1681326214558)(image-20230314010209185.png)]

镜面反射高光specular

如果不加SeparateSpecular没有任何反应,加上SeparateSpecular代表添加独立镜面反射高光

 pass{

        material{
            diffuse[_Color]
            ambient[_Ambient]
            specular[_Specular]
        }

        Lighting on
        SeparateSpecular on
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h7qwVNRd-1681326214558)(image-20230314010759339.png)]

可以看到,大面积的反射高光明显不是我们想要的

光泽度shininess

设置光泽度后

 pass{

        material{
            diffuse[_Color]
            ambient[_Ambient]
            specular[_Specular]
            shininess[_Shininess]
        }

        Lighting on
        SeparateSpecular on
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YnZKXLuQ-1681326214559)(image-20230314011420169.png)]

自发光emission

 pass{

        material{
            diffuse[_Color]
            ambient[_Ambient]
            specular[_Specular]
            shininess[_Shininess]
            emission[_Emission]
        }

        Lighting on
        SeparateSpecular on
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m5reGeN8-1681326214559)(image-20230314012155588.png)]

贴图settexture

Shader "Custom/NewSurfaceShader"
{
    Properties{
        _Color("MainColor",color)=(1,1,1,1)
        _Ambient("ambient",color)=(0.3,0.3,0.3,0.3)
        _Specular("specular",color)=(1,1,1,1)
        _Shininess("shininess",Range(0,8))=4
        _Emission("emission",color)=(1,1,1,1)
        _MainTex("MainTex",2D)=""
    }

    SubShader{
    pass{

        material{
            diffuse[_Color]
            ambient[_Ambient]
            specular[_Specular]
            shininess[_Shininess]
            emission[_Emission]

        }

        Lighting on
        SeparateSpecular on

        settexture[_MainTex]
        {
            Combine texture

        }
    }
    }
 
}

combine(合并)后面直接跟空格

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x8sgeT4v-1681326214559)(image-20230314013829664.png)]

该纹理使用时没用到之前设置的光照数值,是因为combine只连接了纹理贴图,没有连接光照

 settexture[_MainTex]
        {
            Combine texture*primary 

        }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qMoFHrOt-1681326214560)(image-20230314014353341.png)]

因为textureprimary都是0-1的数值,所以最后的显示颜色灰暗一些

settexture[_MainTex]
        {
            Combine texture*primary double

        }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EZ1gGEqf-1681326214560)(image-20230314014503950.png)]

加上double会改善

多纹理混合

一个settexture只能加载一个纹理,所以多纹理混合可以多写几个settexture

   settexture[_MainTex]
        {
            Combine texture*primary double

        }

        settexture[_SecondTex]
        {
            Combine texture*primary double

        }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n7A9Kjw8-1681326214560)(image-20230314015646980.png)]

但是可以看到没有任何反应,问题出在primary上,它是代表顶点着色后光照的颜色,不包括贴图,所以这里应该使用previous

 settexture[_SecondTex]
        {
            Combine texture*previous double

        }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhGYqVaS-1681326214560)(image-20230314015903972.png)]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值