挑战UnityShader学习之三_工欲善其事必先利其器Standard面板详细解析和代码自定义
Standard Shader面板原来的样子
之前第一第二章,分别分享了,最普通,进阶Phonn光的PBR(都不是PBR)模板,本来第三章想分享Unity官方的PBR;结果碰到Unity的作死模式,又得开一章详细说Shader的入门;如果只想获取PBr模板的,请跳去第四章;
Unity Standard Inspector面板真不好说的,丑就一个字,两个字就是,鸡肋;
我们先把Cust Editor去掉
}}FallBack "VertexLit"//CustomEditor "StandardShaderGUI"
}
看到编辑器原来的样子
然后搞了一大轮,才发现 .smoothness 居然是通过Smoothness Factor 控制的
就问你服不服
胡乱分析一通
我这里假设你手上已经有Built-in Shader的源码
又假设你已经阅读前面两章,也又提到若想在Unity做一点点渲染,必须首先先学PBR
(Unity搞那么复杂,主要是为了跨平台,这个后面几章会再详细说,但明知道要跨平台,底层内核设计之差,真是前所未见,这么多年更是不思进取)
又又或者你大学学了vf Shader,有opengl的基础是指
那么,你才好往下看,因为都是写给自己或者学过的,踩过坑的人看的
fragment Shader渲染时用到的参数从哪里来呢?我们就知道关键在于在这个方法
FRAGMENT_SETUP(s)
直接看大神分析,在这里s == 0
//在unitystanderuitils.cginc中,计算alpha对漫反射颜色造成的影响,
o.diffColor = PreMultiplyAlpha (o.diffColor, alpha, o.oneMinusReflectivity, /*out*/ o.alpha);
inline FragmentCommonData MetallicSetup (float4 i_tex)
{
//获取x金属度和y光滑度,定义在UnityStandardInput.cginc中half2 metallicGloss = MetallicGloss(i_tex.xy);half metallic = metallicGloss.x;half smoothness = metallicGloss.y; // this is 1 minus the square root of real roughness m.//....
o.smoothness = smoothness;
return o;
}
如果今天再有人和我说Unity不是垃圾,这公司的市占率不是靠运气,我&……!%&¥&¥&@……!
前面2个文章说了,
你若想哪怕写一点点Shader,都必先学习一般的PBR(必须,否则会被Unity带晕),然后又得学习一整套Unity自定义的PBR(而不能踩到以前的坑,网上的很多学习参考资料,都是我们很多团队不得已只能自己干完了之后,发布到网上的)
Unity自定义PBR很有趣的一个地方就是把,很多其他程序员用的,gloss等价于smoothness,死活就是不用roughness,这下终于有解答了
他们是希望证明他们绝对没有抄袭其他公司,例如UnReal的资源吗?
这回真的是草履虫才看的明白,
请看Unity 对于自家,smoothness的封装:
half2 MetallicGloss(float2 uv)
{half2 mg;#ifdef _METALLICGLOSSMAP#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_Amg.r = tex2D(_MetallicGlossMap, uv).r;mg.g = tex2D(_MainTex, uv).a;#elsemg = tex2D(_MetallicGlossMap, uv).ra;#endifmg.g *= _GlossMapScale;
#elsemg.r = _Metallic;#ifdef _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_Amg.g = tex2D(_MainTex, uv).a * _GlossMapScale;#elsemg.g = _Glossiness;#endif
#endifreturn mg;
}
你说,Unity这个Standard是不是鸡肋?,而且它这封装方法也证明是LS;杠杠的反人类。
从上代码可知,在最后一个分支,s.smoothness 才受_Glossiness本身控制(Inspector面板显示的是 Smoothness);
特喵的还有其他三个分支呢??
而,其实大部分情况,通过_GlossMapScale(Inspector面板显示的是Smoothness Factor) 控制贴图的透明度
mg.g = tex2D(_MainTex, uv).a * _GlossMapScale;
上面的mg. g 解释一下把,
- 就是一个float2变量的第二位,(mg.green),第一位就明显是mg.r(mg.red)
- 对应的就是s.gloss, s.metal,
- 也是我们的老朋友,金属度或粗糙度
-
这也是解释为什么官方Standard不是Smoothness,而只能通过Smoothness Factor 来控制渲染材质(依赖贴图)的效果
Unity再次像我们证明
“编程很简单,写了一大堆,其实有用的只有一行代码”
当然,编程的层次还是很多的,例如模块化,例如插件模式,又例如多线程,虽然说都必须是高级语言才有的特性,但是像Unity这种超低级封装,没想到2020年真还能见着。
渲染效果
搞了一大轮,三篇文章,终于。。。能渲染出一点点,积水的效果
挑战UnityShader学习之三_工欲善其事必先利其器Standard面板详细解析和代码自定义相关推荐
- C/C++/Linux「学习必备」珍藏多年的学习网站分享 | 工欲善其事必先利其器
这里分享的是C/C++学习阶段所需网站,经博主自用使用频率较高的几个网站.废话不多说,直接看正文. ps:初学者可以从菜鸟教程.w3school 在线教程等网站学习一遍基础知识,再结合本篇文章提供的网 ...
- 挑战UnityShader学习之八——用最简单的方法实现下雨天积水效果
关于手撸PBR Shader效果 又一个星期过去了,毫无进展 之前也因为 目标还是那个目标 在官方的Standard PBR基础上做自己的渲染框架,既可以利用其现有跨平台和多版本验证特性,又可以保证后 ...
- 64位java安装包_工欲善其事必先利其器,java开发利器
已经连续分享了三天了,今天继续分享,今天分享的主要内容是开发工具的使用和安装IntelliJ IDEA,以及方法的简介和使用(这篇文章篇幅有点长大家可以先把工具安装好熟悉一下,方法的内容放到下一篇文章 ...
- 黑马程序员_工欲善其事必先利其器
曾经有一个段子说: mac上使用mac os的是文艺青年 mac上使用win的是二逼青年 pc上使用win的是普通青年 pc上使用mac os的牛逼青年 当我决定搞苹果开发的时候,首先遇到的就是开发环 ...
- 逻辑斯蒂回归_逻辑斯蒂回归详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习...
本文包括: 重要概念 逻辑斯蒂回归和线性回归 二项逻辑斯谛回归模型 逻辑斯蒂回顾与几率 模型参数估计 多项逻辑斯谛回归 其它有关数据分析,机器学习的文章及社群 1.重要概念: 在正式介绍逻辑斯蒂回归模 ...
- USB开设备开发学习之三:USB中的端点详细了解
原文:https://blog.csdn.net/go_str/article/details/80985717 前言 端点在实际的USB通讯过程种的具体作用与含义十分重要,但是有些难以理解, ...
- native react 折线图_【详解】纯 React Native 代码自定义折线图组件(译)
本文为 Marno 翻译,转载必须保留出处! 公众号[ Marno ],关注后回复 RN 加入交流群 React Native 优秀开源项目大全:http://www.marno.cn 一.前言 在移 ...
- tcp分包传图片 如何还原_技术控丨超详细解析TCP重传机制
作者:Zhang_Jiawen : 来自:Dell技术社区 TCP 的主要任务是很简单:打包和发送数据.TCP 与其他协议的不同之处在于使用滑动窗口来管理基本数据收发过程,同时确保数据流的有效及可靠传 ...
- c# 设计原则需要学习吗_向最好的学习:产品设计原则
c# 设计原则需要学习吗 重点 (Top highlight) In my job as Design Team Lead at SimpleSite, I've recently been part ...
最新文章
- Apache常用配置
- 国内的IDC数据中心运营维护前景如何?
- redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?
- 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
- 天地图卫星地图_AutoCAD使用卫星地图
- 设计模式系列:小小总结
- Vue 教程第十一篇—— vue-cli
- 转载:python能用来做什么?
- Kali2.0中peda与pwntools的安装
- 一步完成 MySQL 向 Redis 迁移
- 计算机组成原理知识体系
- 社区发现算法——Louvain 算法
- godot读写本地文件
- 数据库关闭的四种方式
- 解决Ubuntu Pycharm图标问号的方法
- 使用phpword替换模板内容 在模板追加内容
- EAN13条形码校验公式及代码实现
- 多目标优化算法:多目标非洲秃鹫优化算法(Multi-objective Africans Vultures Optimization Algorithm,MOAVOA)提供MATLAB代码及参考文献
- Nexus war 下载
- web前端面试题完美整理/涵盖html,CSS、JS、浏览器、Vue、React、移动web。