1.Shader在什么情况下使用

Bumped Specular(凹凸镜面反射),看名字就知道在篇1的基础上加了Specular镜面反射。镜面反射嘛,通常用在一些金属之类会反光的东西上。

image.png

镜面反射效果:

image.png

2.Shader的价值(用的多不多),Shader的难度

Unity4.x时代,默认的金属材质,当年用的也比较多的。

3.代码详细注释

刚打开这个Shader的时候一脸懵啊?怎么shader代码写在SubShader外面,而且写了两个只声明#pragma surface surf xxxx的SubShader。
静下来想想才明白,首先SubShader是按顺序执行的,并且只如果执行一个通过了,后面的不再执行,所以如果赋值以下代码贴在那两个SubShader之前的话,就会只执行到兰伯特。

SubShader {Tags { "RenderType"="Opaque" }LOD 400CGPROGRAM#pragma surface surf Lambert#pragma target 3.0ENDCG}

那这样就说明后一个SubShader必定是为了一些不大行的平台准备的,大多数设备只执行前一个SubShader。
而这两个SubShader需要执行的函数都一样是surf,内容也不变,唯一变化的是声明光照模型的时候后者多了一个nodynlightmap(禁用动态光照贴图)适配一些低端机型。
所以这边的逻辑就比较好理解了,因为CG代码内容一样 所以写在前面,后面用两个不同的SubShader如果第一个SubShader跑不了就跑第二个禁用动态光照贴图的SubShader。

Shader "Legacy Shaders/Bumped Specular" {Properties {_Color ("Main Color", Color) = (1,1,1,1)_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)//镜面反射颜色[PowerSlider(5.0)] _Shininess ("Shininess", Range (0.03, 1)) = 0.078125//镜面反射度_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}_BumpMap ("Normalmap", 2D) = "bump" {}}CGINCLUDEsampler2D _MainTex;sampler2D _BumpMap;fixed4 _Color;half _Shininess;struct Input {float2 uv_MainTex;float2 uv_BumpMap;};void surf (Input IN, inout SurfaceOutput o) {fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);o.Albedo = tex.rgb * _Color.rgb;o.Alpha = tex.a * _Color.a;//光泽度受原图的alpha影响//这里如果改成_Color.a,在修改颜色值透明度的时候会有光泽度明暗调节效果o.Gloss = tex.a;//镜面反射强度直接由一个数值影响o.Specular = _Shininess;o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));}ENDCG//通常情况下只执行第一个SubShaderSubShader {Tags { "RenderType"="Opaque" }LOD 400CGPROGRAM#pragma surface surf BlinnPhong#pragma target 3.0ENDCG}//禁用动态光照贴图,适配某些机型SubShader {Tags { "RenderType"="Opaque" }LOD 400CGPROGRAM#pragma surface surf BlinnPhong nodynlightmapENDCG}FallBack "Legacy Shaders/Specular"
}

4.Shader编写思路,用到的知识点

SurfaceShader输入结构体可选内容
struct Input {float2 uv_MainTex;//_MainTex纹理的uvfloat2 uv_BumpMap;//法线贴图uvfloat3 viewDir;//观察方向,为了计算视察、边缘光照等效果float4 screenPos;//屏幕坐标float3 worldPos;//世界坐标float3 worldRef1;//世界反射向量float3 worldNormal;//世界法线向量};
SurfaceShader输出结构体

官方提供了以下三种结构体,也可以自定义

struct SurfaceOutput{fixed3 Albedo;//基础颜色(漫反射或镜面反射)fixed3 Normal;//切线空间法线fixed3 Emission;//自发光颜色half Specular//镜面反射度fixed Gloss//光泽度fixed Alpha;//透明度};struct SurfaceOutputStandard{fixed3 Albedo;      // 基础颜色(漫反射或镜面反射)fixed3 Normal;      // 切线空间法线half3 Emission;     // 自发光颜色half Metallic;      // 0为非金属, 1为金属half Smoothness;    // 0为粗糙, 1为光滑half Occlusion;     // 遮挡(默认1)fixed Alpha;        // 透明度};struct SurfaceOutputStandardSpecular{fixed3 Albedo;      // 漫反射颜色fixed3 Specular;    // 镜面反射颜色fixed3 Normal;      // 切线空间法线,如果赋值的话half3 Emission;     // 自发光颜色half Smoothness;    // 0为粗糙, 1为光滑half Occlusion;     // 遮挡(默认1)fixed Alpha;        // 透明度};

http://www.taodudu.cc/news/show-4088048.html

相关文章:

  • specular BRDF
  • 97 Three.js 使用 specularMap 设置高光贴图
  • specular图使用方法_CSharpGL(54)用基于图像的光照(IBL)来计算PBR的Specular部分
  • Untiy Shader - Metallic vs Specular Workflow 金属 vs 高光的工作流
  • matlab 去高光,Specular-Highlight-Mitigation-Removal-master
  • Unity Shader - Specular mode: Specular parameter 高光模式中的高光参数
  • specular图使用方法_次世代贴图教程_SPECULAR、SPECULAR POWER原理教程
  • 计算机图形学【GAMES-101】3、着色计算(深度缓存、着色模型、着色频率)
  • SSH 登录指纹验证
  • Android指纹验证(BiometricPrompt)
  • autojs指纹验证
  • android 指纹存储密码,Android指纹登录/指纹支付简述
  • swift-集成touch id功能 指纹验证
  • iOS TouchID指纹验证
  • 如何集成指纹验证到网站系统
  • iOS系统自带指纹验证的使用
  • 一篇文章教你从入门到精通 Google 指纹验证功能
  • Vue指纹识别验证 h5plus
  • Android 指纹验证标准API学习
  • iOS_指纹验证
  • 微信指纹java.lang_微信小程序调用指纹验证
  • 指纹验证错误码
  • iOS 指纹验证
  • Android指纹验证
  • android 指纹验证api
  • linux脚本自动验证,一个无需交互,批量自动连接ssh执行命令的工具(免rsa密钥指纹验证)...
  • 闲时整理3--Android调用指纹验证
  • cordova通过指纹插件进行指纹验证
  • Android开启指纹验证
  • 指纹验证

Unity内置Shader解读2——Bumped Specular相关推荐

  1. Unity内置Shader解读3——Decal

    1.Shader在什么情况下使用 Decal(贴花)贴花就是类似于CF里的喷漆,或者汽车/墙上等贴一个贴纸. image.png 2.Shader的价值(用的多不多),Shader的难度 这个应该是极 ...

  2. unity, 内置shader下载地址

    在unity的download页面上能找到Built in shaders的下载连接. 转载于:https://www.cnblogs.com/wantnon/p/4550631.html

  3. unity URP内置shader lit解析

    unity内置的pbr渲染shader Properties为shader相关属性 两个SubShader里面为相应的渲染内容,第二个为降级处理渲染,如果第一个SubShader不兼容,才会渲染第二个 ...

  4. 闲云野鹤:吃鸡(四)之场景制作—用unity内置草功能制作草

    先上最终效果图吧: 第一种方式:Add Grass Texture,只需要选择草的图片即可 选择Add Grass Texture此种方式unity默认mesh为一个矩形面.基本制作过程没什么值得多说 ...

  5. Unity内置资源如何打包避免冗余

    这是第249篇UWA技术知识分享的推送.今天我们继续为大家精选了若干和开发.优化相关的问题,建议阅读时间10分钟,认真读完必有收获. UWA 问答社区:answer.uwa4d.com UWA QQ群 ...

  6. Unity内置Built-in到可编程URP函数对应整理

    目录 1.总体结构 2.Shader Include 头文件 3.灯光模式 4.变种Variants 5.预处理宏 Predefined Shader Preprocessor Macros 5.1辅 ...

  7. Unity内置的三套消息发送机制的应用实例

    转自http://blog.sina.com.cn/s/blog_1491e52310102wuf6.html 代码简介 : [1] 实例中包含2个类文件, SendMessage.cs 和 Rece ...

  8. Unity3D内置Shader私房课(三)Decal贴花

    在Unity内建Shader的DefaultResourcesExtra的目录中,有一个很简单却很实用的shader--Decal.这是一个贴花着色器,可以在模型的表面添加一个贴花纹理. Unity内 ...

  9. Unity 内置着色器下载方法

    Unity 内置着色器下载方法 官方下载 GitHub下载 官方下载 需要科学上网 官方下载链接 https://unity3d.com/get-unity/download/archive GitH ...

  10. Unity 内置管线Shader升级到URP详细手册

    本文转载自:https://www.jianshu.com/p/3fef69e2efb6 作为技术资料记录和备份,避免遗忘或删除 //================以下为具体内容========== ...

最新文章

  1. 行列式计算的两种方法
  2. python上的数据库sqlite3——插入多行数据
  3. 澳大利亚 计算机 博士,澳大利亚迪肯大学招收计算机博士
  4. Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
  5. mysql iscsi_iscsi共享存储的简单配置和应用
  6. 天池 在线编程 有序队列
  7. 喝酒、吸烟和喝茶三者相对而言,哪个对身体有益?哪个对身体有害?
  8. java魔剑天使,血色天使魔剑官方版
  9. 超薄计算机的HDMI接口,机身轻薄两面观 笔记本接口变化趋势解析
  10. Java基本数据类型取值范围
  11. 3GPP TS 29244-g30 中英文对照 | 5.2.6 Combined SGW/PGW Architecture
  12. 痛并快乐着的保研经历
  13. Python pywin32(一)
  14. 一元二次方程的简单回顾
  15. #444 沸腾客厅:在播客里温暖一个冬天
  16. 无往不利:用SQL解海盗分金的利益最大化问题
  17. hive表信息查询、查看表结构、表操作等
  18. Django的安装及第一个demo
  19. 博文修改内容(自2021年8月开始起的学习内容,持续更新12/09)
  20. idea自定义过滤器

热门文章

  1. Wamp5出现的问题
  2. 看完这篇文章,线上再遇到Jedis「Redis客户端」异常相信你不再怕了!
  3. Spring THREE
  4. 用户画像,原来是这么用的!看一个生活中的案例
  5. markdown在.html中生成目录
  6. 三轴加速度传感器的驱动编程
  7. 【高阶乐理】即兴演奏——和弦进行的重要原则(现代流行乐)
  8. mysql 定时调用sp_使用shell脚本调用mysql数据库存储过程,并设置定时任务
  9. 【Android】canScrollVertically和canScrollHorizontally
  10. Android 10.0 关机界面全屏显示(UI全屏显示)