【《Unity着色器和屏幕特效开发秘笈》】学习整理:第二章(1)
来源:互联网 发布:北风网大数据 编辑:程序博客网 时间:2024/06/03 04:09
第二章的内容比较杂乱,所以打算分几次来记录。
第一个着色器
下面是一个最简单的表面着色器:
Shader "MyShader/Diffuse"{ Properties{ _Color("Color", Color) = (1, 1, 1, 1) } SubShader{ Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf Standard fullforwardshadows #pragma target 3.0 struct Input{ float2 uv_MainTex; }; fixed4 _Color; void surf(Input IN, inout SurfaceOutputStandard o) { o.Albedo = _Color.rgb; } ENDCG } FallBack "Diffuse"} //end shader
此着色器使用的光照模型和Unity5中的默认标准着色器一样,但是只对材质的颜色进行了控制。
如图中所示,左边材质使用的就是代码块中的shader。右边使用的是默认的Standard的材质。由于白色不明显,所以特意全部设置为纯红色。
表面着色器的光照模型和输出结构体
表面着色器中提供了不同的光照模型可供选择,此外还可以定义个性化的光照模型。但是,不同的光照模型所使用的表面着色器的输出结构体不同。因为不同的光照模型需要不同的参数进行计算,而输出结构体的作用就是把这些参数传入光照模型中。如果光照模型和输出结构体不对应会报错。 以下是Unity提供的表面着色器光照模型所对应的结构体。
//使用Lambert和BlinnPhong光照模型时的输出结构体struct SurfaceOutput{ fixed3 Albedo; //表示材质的漫反射颜色 fixed3 Normal; //如果切面法线 fixed3 Emission; //表示材质自发光颜色 fixed Alpha; //表示透明度 half Specular; //表示高光亮度,取值范围0到1 fixed Gloss; //表示光泽度(光强度)};
//使用Standard光照模型时的输出结构体struct SurfaceOutputStandard{ fixed3 Albedo; fixed3 Normal; half3 Emission; //需要注意此处与SurfaceOutput中的类型的不同 fixed Alpha; half Occlusion; //表示遮挡率,默认是1 half Smoothness; //表示光滑度,0表示粗糙,1表示光滑 half Metallic; //金属性,0表示非金属,1表示金属};
//使用StandardSpecular光照模型时的输出结构体struct SurfaceOutputStandardSpecular{ fixed3 Albedo; fixed3 Normal; half3 Emission; fixed Alpha; half Occlusion; half Smoothness; fixed3 Specular; //表示表示高光颜色, //与SurfaceOutput结构体中的Specular属性不同, //这里可以指定一种颜色,而非单一值。};
对第一部分shader代码中的光照模型和结构体替换后,得到了上面图中的对比。至少以我的感触来说是没又觉得有什么不同,而之所以最右面的Unity默认材质球和第一部分图片中的样子不一样,是因为默认材质球中有对Smoothness = 0.5的设置,将其调为0以后即为上图效果。
阅读全文
0 0
- 【《Unity着色器和屏幕特效开发秘笈》】学习整理:第二章(1)
- 【《Unity着色器和屏幕特效开发秘笈》】学习整理:第一章
- 《着色器和屏幕特效》读书笔记第八章-用Unity的渲染纹理实现屏幕特效
- 《着色器和屏幕特效》读书笔记第二章-表面着色器和纹理映射
- 《着色器和屏幕特效》读书笔记第三章-光照模型
- 《着色器和屏幕特效》读书笔记第四章-PBR
- 《着色器和屏幕特效》读书笔记第五章-顶点函数
- 《着色器和屏幕特效》读书笔记第九章-游戏可玩性和屏幕特效
- 《着色器和屏幕特效》读书笔记第六章-碎片着色器和抓取
- 《着色器和屏幕特效》读书笔记第七章-移动端着色器优化
- 《着色器和屏幕特效》读书笔记第十章-高级着色技术
- Unity3D中的屏幕着色器和图像特效
- 《着色器和屏幕特效》读书笔记第一章-创建一个着色器
- Unity着色器学习
- Unity Shader 学习笔记(十四)使用屏幕特效实现亮度饱和度和对比度
- Unity顶点着色器和片段着色器
- Unity手动添加材质和着色器
- Unity 屏幕特效 冬天积雪
- Android Studio将library手动打成jar包
- UE4 VR 瞬移 Teleport 一
- 网易2017内推笔试程序题
- linux网络编程常用头文件
- 在线编译器地址
- 【《Unity着色器和屏幕特效开发秘笈》】学习整理:第二章(1)
- HTML5-SVG
- javaweb学习总结——Servlet开发(一)
- CAN协议,系统结构和帧结构
- QT 之 编译错误总结(1)
- ffmpeg extradata aac
- centos 7安装pycharm
- Dynamics CRM2016 为实体创建Alternate Key时报有重复的键的解决方法
- Curl学习之用法