Unity URP shader ———魔系符文宝石是如何练成的

各位同学大家好  

       我已经很久没有没有写教程了,最近项目比较忙。各种加班各种带小孩儿,不过,老师一有机会也在给尽可能服务大家,今天来一个硬菜:移动端高效魔系符文如何制作,国庆起来,老师抽了点儿时间做了一个宝石模型和贴图:

       老规矩,先看效果:

           

Unity URP Shader——魔系符文宝石是如何练成的

实现原理:

         1:菲尼尔实现边缘光,

               菲尼尔共公式:Fresnel =(1-dot (v,n))^power  ;

                        v  : ViewDir            n: normalWorld 

        2:模拟反射

              因为移动端处理,所以我们做模拟,不做真实的,大致原理是:

               取一张贴图*2次菲尼尔运算。最后去控制强度和颜色,实现我们想要的效果。 

     

 half4 Reflect =reflect * saturate(XionmgMaoWuDao_Fresnel(normalWorld,viewDir,3)*XionmgMaoWuDao_Fresnel(normalWorld,viewDir,3)) *_ReflectIntensity*_ReflectColor;

       3:模拟宝石内部效果

            UV计算: 宝石是在不同的视角下观看宝石,会看见 视乎宝石里面的画面与镜子相同,都是无穷大。那么计算机科学也是同样的原理,也是从观察角度去看,所以UV的计算方式如下:

           视角方向的(XY方向)-原点的XY方向,然后再做模型的Tiling运算。最后再计算出模型法线在世界空间中的XY方向  。加在一起实现视觉错觉运算。

        

   half2 InsideUV = (viewDir.xy - float3 (0,0,0).xy)*_InsideUvTiling.xy+_InsideUvTiling.zw;InsideUV+= normalWorld.xy * _InsideUvIntensity ;

 

最终代码如下:

 

//熊猫悟道
Shader "XiongMaoWuDao/XiongMaoLaoShi_Gem"
{Properties{_normalPaner ("normal Panner",vector) =(0,0,0,0)[MainColor] _BaseColor("BaseColor", Color) = (1,1,1,1)_ReflectColor ("Reflect Color ",Color) = (1,1,1,1)[HDR]_RimColor ("Rim Color" ,Color)= (1,1,1,1)_EimissionMap ("Eimiss Map",2D) = "white" {}_ReflectIntensity ("Reflect Intensity",float) =1_InsideUvTiling ("Inside UV Tiling" , vector) =(1,1,1,1)_InsideUvIntensity ("Inside Uv Intensity" ,float) = 1_InsideMap ("Inside Map",2D)="white"{}    }SubShader{Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalRenderPipeline" "Queue"="Geometry"}Pass{HLSLPROGRAM#pragma vertex vert#pragma fragment frag#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"struct Attributes{float4 positionOS   : POSITION;half3 normal        :NORMAL ;half2 uv           : TEXCOORD0;};struct Varyings{half2 uv           : TEXCOORD0;float4 positionHCS  : SV_POSITION;half3  viewDir      :TEXCOORD1;half3  normalWorld  :TEXCOORD2 ;};TEXTURE2D(_EimissionMap);SAMPLER(sampler_EimissionMap);TEXTURE2D(_InsideMap);SAMPLER(sampler_InsideMap);CBUFFER_START(UnityPerMaterial)float4 _EimissionMap_ST;half4 _RimColor;half3 _normalPaner;half  _ReflectIntensity;half4 _InsideUvTiling;half  _InsideUvIntensity;half4 _InsideMap_ST;half4 _BaseColor;half4 _ReflectColor;CBUFFER_END//宝石菲尼尔反射half XionmgMaoWuDao_Fresnel( half3 normal ,half3 viewDir ,half power){//菲尼尔公式: (1-dot (v,n))^power ;return pow( 1.0- saturate(dot(normal,viewDir).x) ,power);}Varyings vert(Attributes v){Varyings o;half3 posWS = TransformObjectToWorld (v.positionOS.xyz);o.positionHCS = TransformObjectToHClip(v.positionOS.xyz);o.normalWorld = TransformObjectToWorldNormal (v.normal +_normalPaner);o.viewDir  =GetWorldSpaceNormalizeViewDir(posWS);o.uv = TRANSFORM_TEX(v.uv, _EimissionMap);return o;}half4 frag(Varyings i) : SV_Target{//初始化数据half3 normalWorld = normalize (i.normalWorld);half3 viewDir = normalize (i.viewDir);//DIFFUSEhalf4 Emiss = SAMPLE_TEXTURE2D(_EimissionMap, sampler_EimissionMap, i.uv);half4 DiffuseA = (XionmgMaoWuDao_Fresnel(normalWorld,viewDir,3)+Emiss.r)*_RimColor;//reflecthalf reflect = SAMPLE_TEXTURE2D(_EimissionMap, sampler_EimissionMap, normalWorld.xy).g;half4 Reflect =reflect * saturate(XionmgMaoWuDao_Fresnel(normalWorld,viewDir,3)*XionmgMaoWuDao_Fresnel(normalWorld,viewDir,3)) *_ReflectIntensity*_ReflectColor;//Insidehalf2 InsideUV = (viewDir.xy - float3 (0,0,0).xy)*_InsideUvTiling.xy+_InsideUvTiling.zw;InsideUV+= normalWorld.xy * _InsideUvIntensity ;half4 InsideMap = SAMPLE_TEXTURE2D(_InsideMap, sampler_InsideMap, InsideUV);half4 totalColor = (DiffuseA+InsideMap)*_BaseColor + Reflect ;return totalColor;}ENDHLSL}}
}

              

     

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车免拆诊断案例 | 2013款宝马116i车偶尔加速不良

故障现象  一辆2013款宝马116i车,搭载N13B16A 发动机,累计行驶里程约为12.1万km。车主反映,该车行驶中偶尔加速无反应,且发动机故障灯异常点亮。 故障诊断 接车后试车,故障现象无法再现。用故障检测仪检测&#xff…

RestClient查询文档match查询、精确查询和布尔查询

目录 match查询 精确查询 布尔查询 match查询 全文检索的match和multi_match查询与match_all的API基本一致。差别是查询条件,也就是query的部分。 因此,Java代码上的差异主要是request.source().query()中的参数了。同样是利用QueryBuilders提供的方法…

解决在Windows中安装tensorflow2.10无法检测到GPU的问题

解决在Windows中安装tensorflow2.10无法检测到GPU的问题 官方给出的Windows本地安装方式 更新显卡驱动到最新。安装anaconda或miniconda作为python环境的管理工具。创建新的环境tf:conda create --name tf python3.9,然后进入改环境:conda …

redis的zset实现下滑滚动分页查询思路

常规zset查询 我们redis的数据为 我们知道 我们常规查询的话 我们假如 zset 表中 有7个元素,然后我们进行分页查询的话,我们一次查3个元素,然后查出来元素 和元素的分数 我们redis的语法应该这样写 zrevrangebyscore wang 1000 0 withsc…

目标检测最新SOTA模型D-FINE

2024年10月18号,中科大推出了 D-FINE,这是一款功能强大的实时物体检测器,通过重新定义 DETR 模型中的边界框回归任务实现了出色的定位精度。 摘要 D-FINE 包含两个关键组件:细粒度分布细化 (FDR) 和全局最优定位自蒸馏 (GO-LSD)…

【正点原子K210连载】第四十五章 人脸识别实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第四十五章 人脸识别实验 在上一章节中,介绍了利用maix.KPU模块实现了人脸68关键点检测,本章将继续介绍利用maix.KPU模块实现的人脸识别。通过本章的学习,读者将学习到人脸识别应用在CanMV上的实现。 本章分为如下几个小节: 45.1…

vue3使用element-plus手动更改url后is-active和菜单的focus颜色不同步问题

在实习,给了个需求做个新的ui界面,遇到了一个非常烦人的问题 如下,手动修改url时,is-active和focus颜色不同步 虽然可以直接让el-menu-item:focus为白色能解决这个问题,但是我就是想要有颜色哈哈哈,有些执…

车载实操:一对一实操学习、CANoe实操学习、推荐就业机会、就业技术支持、协助面试辅导

FOTA模块中OTA的知识点:1.测试过程中发现哪几类问题? 可能就是一个单键的ecu,比如升了一个门的ecu,他的升了之后就关不上,还有就是升级组合ecu的时候,c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

【鸡翅Club】项目启动

一、项目背景 这是一个 C端的社区项目,有博客、交流,面试学习,练题等模块。 项目的背景主要是我们想要通过面试题的分类,难度,打标,来评估员工的技术能力。同时在我们公司招聘季的时候,极大的…

前端SSR框架(Next、Nuxt)利用宝塔面板部署

1、部署的本质 SSR服务端渲染的框架部署区别于常规的CSR项目的部署,并不是打包之后访问某个文件就行,而是需要在服务器中运行项目之后访问某个地址,无论是基于Vue的Nuxt.js框架还是基于React的Next.js框架道理都是一样的 因此区别于CSR我们…

Django学习-静态文件

注意:配置项是个元祖,如果只有一项,别忘了在元素后面加逗号 settings: STATICFILES_DIRS (os.path.join(BASE_DIR,static),)urls: path(test_static, views.test_static)views: def test_static(request):return render(request,test_stat…

中科星图(GVE)——过火面积识别(dNBR)和CART方法进行火灾识别

目录 简介 函数 sampleRegions(collection,properties,scale,projection,tileScale,geometries) gve.Classifier.Cart(maxNodes,minLeafPopulation,maxDepth) updateMask(mask) 代码 网址推荐 知识星球 机器学习 简介 过火面积识别(dNBR)和CART…

Jlink 直接读取单片机数据

1. 驱动版本 因人而异,这里我使用的是 “J-Flash V6.96” 本人驱动链接:夸克网盘 提取码:rgzk 2. 打开软件 3. 创建jlink工程 4. 选择芯片 此处本人使用芯片 “STM32F103VCT6” 5. 连接单片机 连接成功反馈 6. 读取单片机内部数据 …

WordPress监控用户行为回放插件

在数字营销的世界里,了解用户行为是提升用户体验和转化率的关键。nicen-replay 插件,它能够让您轻松回放用户在网站上的每一步操作,从点击到滚动,再到表单填写,每一个细节都清晰可见 nicen-replay,是一款可…

目标检测——Cascade R-CNN算法解读

论文: Cascade R-CNN: Delving into High Quality Object Detection (2017.12.3) 链接:https://arxiv.org/abs/1712.00726 Cascade R-CNN: High Quality Object Detection and Instance Segmentation (2019.6.24) 链接:https://arxiv.org/abs…

Miniconda管理虚拟环境【Python环境配置】

Miniconda管理虚拟环境【Python环境配置】 1. 下载并安装Miniconda2. 管理虚拟环境3. 管理虚拟环境中的包 1. 下载并安装Miniconda 1. 下载 从清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载Miniconda:https://mirrors.tuna.tsinghua.edu.cn/anaconda…

基于YOLO11/v10/v8/v5深度学习的安检X光危险品检测与识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

技术分享:A-23OH型树脂在汽车涂装废溶剂回收中的应用

在当今汽车制造业竞争激烈的环境下,提高生产效率、降低成本的同时,满足环保要求已成为各制造商追求的核心目标。水性涂料因其环保、节能等多重优势,在汽车涂装领域的应用日益广泛。然而,随之而来的喷涂废溶剂处理问题也日益凸显。…

面试应该问什么?

在求职者面试的过程中,向面试官提问是一个展现自己积极态度、对职位和公司兴趣以及进一步了解工作环境和职业发展机会的重要环节。以下是一些求职者可以在面试中向面试官提问的问题,这些问题旨在帮助你更全面地了解未来的工作环境、团队文化、以及个人职…

【SSM详细教程】-04-Spring基于注解的组件扫描

精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课…