菜鸡shader:L1基于兰伯特原理的玉石、条纹、点阵材质

news2024/12/24 22:08:08

目录

  • 玉石材质
  • 条纹材质
  • 点阵效果

这里就简单说下原理吧,使用unity很久之前的一个插件shaderforge,最近几年好像在unity资源商店已经不再维护了,但是有shader forge的官网:在这,碰到节点不会的时候可以查一下官方文档,连连看完了还能直接看代码,还是很方便的,节点也比较少。其实可以用ue做,但是ue4节点还不咋熟悉,先用unity熟悉原理,后面转到ue也方便。

玉石材质

先放一下材质的效果:
在这里插入图片描述
在这里插入图片描述

首先是兰伯特基本原理,这里采用的是半兰伯特模型,兰伯特模型的取值区间是[-1,1],但是这样映射到材质上的话就有一大半的区域是黑色的,因为值小于0的区域默认取值颜色是黑色,所以将兰伯特的取值区间变为[0,1],也就是原有区间先乘0.5再加上0.5。然后采样我们自己的贴图,具体节点如下:
在这里插入图片描述
可以看到我的材质球是有两个高光点,且加上了菲涅尔效用,增加材质的通透感。

  • 两个高光点是对法向量进行了两次偏移。
  • 在最后加上菲涅尔效应。

两个高光点:
在这里插入图片描述

  • 两个HighLightOffset负责偏移法线的方向。
  • 两个HighLight则是“高光点”的阈值,如果偏移后的发现与光方向的点乘结果小于该阈值就输出0,否则输出1。这样可以得到”高光点“,除了高光点,其他区域都为黑色。
  • 然后将两个“高光点”使用max进行取值,因为这是对每个顶点进行操作,在单个顶点上,取值大的,黑色的地方相互取值还是黑色,高光点和黑色比较取值,取高光点的值,这样就能让两个高光点同时出现。

在这里插入图片描述
在这里插入图片描述

  • 使用lerp节点,让我们的贴图和高光点混合,类似于使用ps中的图层蒙版,在最上层添加蒙版后,蒙版区域内就会变成下一个蒙版里内容。max的取值只会是0或1。
  • 如果高光点max的取值为1,那就输出HighLightColor作为该顶点的颜色,如果max取值为0,就输出半兰伯特模型采样后的颜色作为顶点颜色。

在这里插入图片描述

  • 最后是菲涅尔项,使用自带的菲涅尔节点,乘上颜色后,与之前lerp的结果进行screen混合,在面板中适当调节参数。最后得到玉石材质结果。
    在这里插入图片描述

条纹材质

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • screen position屏幕uv坐标和模型在摄像机中的深度值相乘,可以保证我们在调整窗口的远近的时候,远近看起来效果是一模一样的。

近的时候看:
在这里插入图片描述
远的时候看:
在这里插入图片描述
在这里插入图片描述

  • 蓝色的部分是给明暗叠加一个颜色。
  • 红色部分的step是利用之前计算出来的条纹效果与明暗效果进行step比较,如果顶点上条纹的值比明暗的值小,就返回1,让条纹存在。否则返回0,让明暗存在。
  • 红色部分的lerp是利用前一个step的值判断暗部和亮部。在模型中,暗部就是没有条纹的地方,亮部则是条纹。然后分别给暗部和亮部设置颜色值。

在这里插入图片描述

  • 最后将条纹效果和明暗效果叠加,并使用clamp0-1函数防止最后的取值超过范围[0,1],作为最终的自发光结果。

点阵效果

在这里插入图片描述

在这里插入图片描述

  • 这里解释一下为什么猴头模型截图是使用一个类似正方形的方框,因为这里也使用到了屏幕uv坐标,当屏幕的宽特别长的时候,这些点阵就会被拉伸。

像这样:
在这里插入图片描述
在这里插入图片描述

  • 首先是屏幕uv坐标的映射,在屏幕坐标中,原点是在屏幕中心的,所以我们为了产生点阵的效果,首先要将uv坐标从[0,1]扩大到[0,dotsize],这里的dotsize是我们想扩大的倍数。当我们扩大了dotsize那么多倍之后,再使用frac节点,对结果取小数。
    在这里插入图片描述
  • 我们已经将uv扩大了dotsize那么多倍,也可以看作是从uv坐标都是[0,1]扩大到uv坐标都是[0,dotsize],然后每个1*1的方格都是一个小的uv坐标。如下图,每个橙色的方框都是没有扩大dotsize之前的一个小的uv坐标系,我们取小数的意义就是在每个小坐标系中再次进行排列,范围是[0,1]。
    在这里插入图片描述
  • 取完小数之后我们再重映射,将[0,1]区间映射到[-0.5,0.5]区间内,这意味着将uv中心从左下角移动到每个方格的正中心。意味着方格的左下角的四分之一是黑色的,但这在后面没什么用,只是为了确保到这步位置,做出来的东西没有出错。
  • 这时候我们再使用length取长度,此时我们uv的坐标原点是每个方格的中心,取长度是从中心原点出发,计算方格中每个点距离原点的长度,这样就能让每个方格内都变成内黑外白的圆形。

在这里插入图片描述
在这里插入图片描述

  • 这里我们用兰伯特模型计算明暗,加上了光衰部分,暂时还不知道这个原理,场景中用的是平行光,光衰应该是没用才对。

在这里插入图片描述

  • 计算完明暗后,我们需要重映射,将明暗区间[1,0]映射到[-0.5,2],再进行power运算。原来还不太明白,就先不解释了。最后用round节点进行四舍五入,作为最后的自发光结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手,带你发布你的第一个npm包

我们在编写项目的时候,都会引入很多很好用的工具包,例如VueX、axios、Router、Element UId等。这些包很好用,安装引入也很方便。那如果我们也想发布一个我们自己的工具包,在以后编写项目时,直接引入我们自己的工具包要…

干货 | 正确引用参考文献的6大技巧

Hello,大家好! 这里是壹脑云科研圈,我是喵君姐姐~ 对于学术研究而言,正确引用参考文献非常重要。参考文献不仅展现了自己的学术水平,同时也给研究定位,突显研究在前人研究基础上作出的贡献。 …

牛客_华为_HJ32 密码截取

HJ32 密码截取 647. 回文子串 516.最长回文子序列 ## 这不就是 最长回文子串&#xff01;&#xff01; ## 回文子串有两种模式 ## ABA ##CAACst input() n len(st) ## 双指针 def func(s,i,j,n):res 0while i>0 and j<n and s[i]s[j]:i-1j1return j-i-1 ## 由于i j…

五本计算机必读书籍总结

一、计算机组成原理 思维导图&#xff1a; 1、计算机系统概述 主要讲授信息的数字化表示、存储程序与冯诺依曼体制&#xff1b;计算机的诞生和发展&#xff1b;计算机系统的层次结构和硬件系统组织&#xff1b;计算机的主要性能指标。 2、数据的表示、运算与校验 主要讲授数值…

C语言中链表中经典面试题

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

扩展 VirtualBox 已分配磁盘的方法

扩展 VirtualBox 已分配磁盘的方法 第一步&#xff1a;用VirtualBox命令行调整已分配磁盘的大小第二步&#xff1a;用windows磁盘管理工具扩展磁盘空间 第一步&#xff1a;用VirtualBox命令行调整已分配磁盘的大小 "c:\Program Files\Oracle\VirtualBox\VBoxManage.exe&q…

3年经验程序员聊聊外包项目,总结了6个典型的问题该如何解决

我是一名老程序员&#xff0c;接了项目&#xff0c;接外包项目已经有3年多的经验了。今天我想分享一些接项目的经验给大家。 第一&#xff0c;辞职去接外包&#xff0c;好吗&#xff1f;有很多人幻想辞职了全职去接外包&#xff0c;但我并不太建议这样做。我建议大家先把自己的…

计算机基础必读书籍

一、计算机组成原理 思维导图&#xff1a; 1、计算机系统概述 主要讲授信息的数字化表示、存储程序与冯诺依曼体制&#xff1b;计算机的诞生和发展&#xff1b;计算机系统的层次结构和硬件系统组织&#xff1b;计算机的主要性能指标。 2、数据的表示、运算与校验 主要讲授数值…

一个go http和grpc客户端库

大家好&#xff0c;我是peachesTao&#xff0c;今天是五一假期的第4天&#xff0c;首先祝大家劳动节快乐。今天给大家推荐一个统一http和grpc客户端调用的库&#xff0c;名为prpc&#xff0c;github地址&#xff1a;prpc&#xff0c;该库是我公司根据最佳实践总结开发出来的&am…

【C++进阶之路】类和对象(上)

文章目录 一.面向对象和面向过程二.类的引入——结构体三.类的定义1.类定义的两种方式在类里面定义函数在类外定义函数——类域 2.访问限定符3.封装——面向对象的三大特性4.类的实例化 四.类对象模型求一个类的大小 五.this指针基本认识代码解读 一.面向对象和面向过程 面向对…

【移动端网页布局】流式布局案例 ③ ( 实现搜索栏功能 | 伪元素选择器 | 子绝父相 | 外边距塌陷处理 | 二倍精灵图处理方案 )

文章目录 一、搜索栏样式及核心要点1、实现效果2、自动伸缩搜索栏实现3、搜索栏父容器设置4、搜索栏左右两侧的按钮盒子5、搜索栏盒子6、二倍精灵图处理方案 二、完整代码示例1、HTML 标签结构2、CSS 样式3、展示效果 一、搜索栏样式及核心要点 1、实现效果 上一篇博客中 , 完成…

2022年职业教育技能大赛网络安全 linux系统渗透提权

B-10&#xff1a;Linux 系统渗透提权 任务环境说明&#xff1a; ✓ 服务器场景&#xff1a;Server2202&#xff08;关闭链接&#xff09; ✓ 用户名&#xff1a;hacker 密码&#xff1a;123456 使用渗透机对服务器信息收集&#xff0c;并将服务器中 SSH 服务端口号作为 flag…

API 接口自动化测试的基本原理及实战教程

目录 常用API接口协议介绍 Http协议接口请求的介绍 HTTPS协议 SMTP协议 SNMP协议 FTP协议 API 接口自动化测试的基本原理 常用API接口协议介绍 HTTP协议 超文本传输协议 它是用来在Internet上传送超文本的传送协议&#xff0c;运行在TCP/IP协议族之上&#xff0c;它可…

Docker file镜像

目录 一、Docker镜像的创建 1、基于现有镜像创建 2、基于本地模版创建 3、基于Dockerfile创建 1、联合文件系统&#xff08;UnionFS&#xff09; ​编辑2、镜像加载原理 3、Dockerfile 4、Docker 镜像结构的分层 二、Dockerfile 操作常用的指令 &#xff08;1&#xf…

把树莓派改造成NAT软路由器

本文目录 1、查看网卡情况2、配置静态ip3、配置IP转发和SNAT功能3.1、开启Linux的报文转发功能 3.2、开启SNAT功能4、进阶配置4.1、如果WAN口(上行接口)eth0是动态分配的IP地址4.2、在LAN口上&#xff0c;给下游主机开启自动分配IP地址功能4.3、永久保存iptables, SNAT配置&…

Redis学习笔记02(主从同步,哨兵,哨兵集群)

数据同步&#xff1a;主从数据库如何保障数据一致性 redis具有高可靠性&#xff1a;1.数据尽量减少丢失&#xff08;AOF和RDB来保障&#xff09; 2.服务尽量减少中断.第二点通过增加冗余副本来保障。 读写分离&#xff1a; 减少保障数据一致性的开销。修改操作只会在主库上进…

《花雕学AI》解锁ChatGPT潜力!183个最佳提示语,助您充分利用人工智能技术

随着机器学习和自然语言处理技术的不断进步&#xff0c;人工智能在各个领域的应用越来越广泛。ChatGPT&#xff08;Generative Pre-trained Transformer&#xff09;是一个强大的自然语言生成模型&#xff0c;它可以帮助我们生成高质量的文本内容。本文为你列举了 183 种可能的…

【51单片机】DS1302时钟模块

&#x1f38a;专栏【51单片机】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Waiting For Love】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 目录 &#x1f354;效果 &#x1f354;代码 main.…

Stable Diffusion 本地部署教程不完全指南

ChatGPT免费体验入口网址 http://chat.xutongbao.top 参考链接&#xff1a; ERROR: Could not find a version that satisfies the requirement torch1.7.0 ERROR: No matching……_congcongiii的博客-CSDN博客 下载链接&#xff1a; https://download.pytorch.org/whl/cu11…

VMware下centos7开机登陆页面死循环问题解决

文章目录 VMware下centos7开机登陆页面死循环问题详细解决解决 VMware下centos7开机登陆页面死循环问题详细解决 脚本中有reboot重启命令 并且给该脚本加上了开机自启动 因为在脚本中没有给重启做判断&#xff0c;运行脚本后就会一直重启 解决 在VMware下centos7开机页面按e键…