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

这篇具有很好参考价值的文章主要介绍了菜鸡shader:L1基于兰伯特原理的玉石、条纹、点阵材质。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

玉石材质

先放一下材质的效果:
菜鸡shader:L1基于兰伯特原理的玉石、条纹、点阵材质
菜鸡shader:L1基于兰伯特原理的玉石、条纹、点阵材质

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

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

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

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

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

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

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

  • 最后是菲涅尔项,使用自带的菲涅尔节点,乘上颜色后,与之前lerp的结果进行screen混合,在面板中适当调节参数。最后得到玉石材质结果。
    菜鸡shader:L1基于兰伯特原理的玉石、条纹、点阵材质

条纹材质

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

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

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

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

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

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

点阵效果

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

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

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

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

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

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

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

菜鸡shader:L1基于兰伯特原理的玉石、条纹、点阵材质文章来源地址https://www.toymoban.com/news/detail-467929.html

  • 计算完明暗后,我们需要重映射,将明暗区间[1,0]映射到[-0.5,2],再进行power运算,power其实就是幂函数,幂函数就是x^y的形式,也就是x和自己相乘,相乘的次数有y那么多次,那么如果偏黑的颜色,也就是小于1的小数和自身相乘就会越变越小,颜色自然也就越变越黑。最后用round节点进行四舍五入,作为最后的自发光结果。

到了这里,关于菜鸡shader:L1基于兰伯特原理的玉石、条纹、点阵材质的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【M波段2D双树(希尔伯特)小波多分量图像去噪】基于定向M波段双树(希尔伯特)小波对多分量/彩色图像进行降噪研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文实

    2024年02月13日
    浏览(45)
  • L1、L2正则化的原理及适用场景

    1.1 含义 权值向量  中各元素的绝对值之和,一般记作   。 1.2  公式表示 添加了L1正则化的损失函数一般可表示为: 1.3 作用 L1正则常被用来解决过拟合问题; L1正则化容易产生稀疏权值矩阵(更容易得到稀疏解),即产生一个稀疏模型(较多参数为0),因此也可用于特征

    2024年02月09日
    浏览(49)
  • 【图像增强——7种锐化方法原理与实现(C++、Python、shader GLSL)】

    Image sharpening algorithms are a technique used to enhance details and edges in images. These methods can all be used for image sharpening. In short, sharpening is about enhancing the difference on edges (what is an edge, see image edge detection, etc.) to highlight the color brightness value between pixels around the edge. Edge detection is to find the edg

    2024年02月07日
    浏览(53)
  • 希尔伯特-包络分析步骤与实例

    希尔伯特-包络分析流程   对于齿轮箱振动信号而言,由于存在多对齿轮同时参与啮合,那么,测量得到的信号将可能出现多个以齿轮啮合频率或及谐频为载波频率、轴频为调制频率的幅值调制、频率调制或混合调制的情况,除此之外,还可能是箱体的固有频率等其他频率作

    2023年04月18日
    浏览(44)
  • 希尔伯特变换与SSB调制

    最近因为一些契机,在补一些通信原理的知识,接下来的博客不求达到“一语惊醒梦中人”的效果,只求各位读完以后,能直观的理解频谱如何搬移?将课本的公式转化为自我的“ 直觉 ”。 全篇没有一个公式推导 ~后续有了一些别的收获或者体会,也会博客更新的。 最开始

    2023年04月09日
    浏览(52)
  • AI菜鸡浅谈ChatGpt

            最近最火的话题可能就是Chatgpt ,这个对话机器人横空出世,大大突破了人类之前对AI 对话机器人的认知和预期,上次这样的颠覆认知的突破还是7年前的阿法狗,但是这一次Chatgpt 带来的革命可能要更深远。我从以下几个方面来谈一下我对它的一些看法和思考。

    2023年04月26日
    浏览(41)
  • 菜鸡学习zookeeper源码(三)NIOServer的启动

    上一篇写到了QuorumPeer的start方法,里面主要进行执行了loadDataBase方法(进行加载本地的数据信息,具体是怎么进行加载的,没在文章中进行说明,这块小园子也没看,等分析完整体的启动流程之后在进行分析), 这篇文章的话主要写startServerCnxnFactory方法,在上一篇文章中也进

    2024年01月24日
    浏览(41)
  • 二本菜鸡,颓废两年的自我救赎

    大家好,我是帅地。 随着校招的结束,帅地的星球里也有不少小伙伴前来报喜,今天这篇,是星球一个颓废两年同学的自我救赎之路,我觉得他的经历和很多人一样,前两年可能就颓废了,后面才后知后觉,具有一定的代表性。 正文如下: 感谢地哥的邀请,作为二本+大学颓

    2024年02月03日
    浏览(47)
  • 【Unity Shader】屏幕后处理4.0:基于高斯模糊的Bloom

    原本打算写高斯模糊和双重模糊两个实现Bloom方法的对比,但两个加在一起篇幅过长,于是拆成两篇文章来进行。 学习前建议应先搞清楚的几个概念 HDR LDR ToneMapping 几种模糊算法 最近一直在学习Unity Shader实现各种后处理效果,Bloom效果就是其中之一,它也是游戏中最常见的效

    2023年04月11日
    浏览(44)
  • 【unity shader】水体渲染基础-基于texture distortion的流体流动材质

    当液体静止时,它在视觉上与固体没有太大区别。 但大多数时候,我们的性能不一定支持去实现特别复杂的水物理模拟, 需要的只是在常规的静态材料的表面上让其运动起来。我们可以对网格的 UV 坐标实现动态变化,从而让表面的纹理效果实现变形的动态变化。 1.1. uv实时

    2024年02月03日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包