[置顶] 神临的Shader学习之漫反射贴图(二)
2017-12-26 11:56
387 查看
上一篇介绍了最基本的漫反射代码和原理,那么关于漫反射在使用的时候肯定会遇到反射的力度,以及光彩等的控制问题,于是聪明的人类再次发挥了他的作死能力,想到了用贴图去控制这些东西,也是因为这个原因我们开始了痛苦挣扎的贴图渲染之旅(这些都是神临瞎想出来的逻辑发展过程,姑且听听就行了,哈哈).
老样子,先上代码,然后挑选几点说明.
(1)在这里引用漫反射贴图,什么是漫反射贴图呢?,就像下面这样,有渐变效果的贴图就是,当然要想有好的效果需要专门的定制才行.
![](https://img-blog.csdn.net/20171226113813604?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzg1NzI0NzI=/fo<br/>4000<br/>nt/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
然后通过控制uv的坐标索引就能得的相对应的漫反射颜色了,很神奇,需要自己去琢磨.
(2)调用我们自定义的光照模型
(3)是我们自定义的光照模型,这里引用了lightDir和atten(光的方向和距离)参与了计算之中.
(4)基本的lambert漫反射计算,原理在前面点到过了.
(5)half lambert 漫反射计算,其实就是一种加强光照效果的计算,像下面这张图,就是很好的列子
![](https://img-blog.csdn.net/20171226114817429?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzg1NzI0NzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(6)对漫反射贴图的坐标索引计算,自己推导一下应该就能得出结果.
(7)对外部光照的一种控制方式,这里也仅仅是参与到光照计算中而已,没有进行特殊的处理,pow是指数的意思,慢慢推导一下,没有问题.
嗯,关于漫反射贴图的东西就先到这里了,回头想想自己一年前的大学生活真是糜烂额,往事不堪回首!!!
下次继续,谢谢.
老样子,先上代码,然后挑选几点说明.
Shader"myDiffuse" { properties { _mainTex("Maintex",2d)="white"{} _EmissiveColor("Emissive Color",color)= (1,1,1,1) _AmibientColor("Amibient Color",color)=(1,1,1,1) _SomeValue("Coefficient",Range(0,10))=2.5 _RampTex("Ramp texture",2D)="white"{}//(1) } SubShader { Tags{"RanderType"="Opaque"} LOD 200 CGPROGRAM #pragma surface surf BasicDiffuse//(2) sampler2D _mainTex; float4 _EmissiveColor; float4 _AmibientColor; float _SomeValue; sampler2D _RampTex; inline float4 LightingBasicDiffuse(SurfaceOutput s,fixed3 lightDir,fixed atten)//(3) { float difLight = dot(s.Normal,lightDir);//(4) float hLambert = difLight*0.5+0.5;//(5) float3 ramp = tex2D(_RampTex,float2(hLambert,hLambert)).rgb;//(6) float4 col; col.rgb = s.Albedo*_LightColor0.rgb*(ramp); col.a = s.Alpha; return col; } struct Input { float2 uv_MainTex; }; void surf (Input IN,inout SurfaceOutput o) { float3 i = tex2D(_mainTex,IN.uv_MainTex).rbg; float4 c = pow((_EmissiveColor+_AmibientColor),_SomeValue);//(7) o.Albedo = c.rgb*i.rbg; o.Alpha = c.a; } ENDCG } FallBack"Diffuse" }
(1)在这里引用漫反射贴图,什么是漫反射贴图呢?,就像下面这样,有渐变效果的贴图就是,当然要想有好的效果需要专门的定制才行.
然后通过控制uv的坐标索引就能得的相对应的漫反射颜色了,很神奇,需要自己去琢磨.
(2)调用我们自定义的光照模型
(3)是我们自定义的光照模型,这里引用了lightDir和atten(光的方向和距离)参与了计算之中.
(4)基本的lambert漫反射计算,原理在前面点到过了.
(5)half lambert 漫反射计算,其实就是一种加强光照效果的计算,像下面这张图,就是很好的列子
(6)对漫反射贴图的坐标索引计算,自己推导一下应该就能得出结果.
(7)对外部光照的一种控制方式,这里也仅仅是参与到光照计算中而已,没有进行特殊的处理,pow是指数的意思,慢慢推导一下,没有问题.
嗯,关于漫反射贴图的东西就先到这里了,回头想想自己一年前的大学生活真是糜烂额,往事不堪回首!!!
下次继续,谢谢.
相关文章推荐
- [置顶] 神临的Unity shader 学习之法线贴图(三)
- Shader学习——12可调节像素漫反射带贴图 加法线贴图 加自身边缘发光。。。。。常用
- Shader学习——11可调节像素漫反射带贴图 加法线贴图 透明。。。。。常用
- Shader学习——10可调节像素漫反射 带贴图 加法线贴图 。。。。。常用
- Shader学习——09可调节像素漫反射加高光(高光更亮)带贴图 加法线贴图 。。。。。常用
- [置顶] 神临的 Unity shader 学习之多Pass渲染 (八)
- [置顶] 神临的 unity shader 学习之顶点颜色(七)
- [置顶] 神临的 unity shader 学习之alphatest(六)
- [置顶] 神临的Unity shader 学习之镜面反射(四)
- [置顶] 神临的 unity shader 学习之多pass渲染 (十)
- shader学习基础之五(详解uv坐标,c#类似uv坐标的值以及贴图操作)
- Unity Shader 学习笔记(6) 漫反射
- [置顶] 神临的uLua学习(三)
- Unity Shader 学习笔记(十二)漫反射卷积光照模型
- Shader中贴图知识汇总: 漫反射贴图、凹凸贴图、高光贴图、 AO贴图、环境贴图、 光照纹理及细节贴图
- Shader学习——07可调节像素漫反射加高光(高光更亮)。。。。。常用
- [置顶] 神临的uLua学习(二)
- Shader学习——06可调节顶点漫反射加高光
- [置顶] 【Aladdin Unity3D Shader编程】之四 贴图纹理
- Shader学习 基于vert/frag顶点片段级的纹理采样 光照贴图实现