用Shader glsl实现一个简单的PBR光照模型
PBR模型定义了各种光照属性,如基础颜色、金属度、粗糙度等,就像给物体设定各种 “性格特点”。顶点着色器负责把顶点从模型空间转换到裁剪空间,同时计算一些用于光照计算的参数,就像给顶点 “搬家” 并准备好 “行李”。而片段着色器是整个 PBR 实现的核心,计算每个像素的颜色。它通过采样纹理获取各种属性值,然后根据 PBR 光照模型计算漫反射和镜面反射项,最后结合环境光得到最终颜色,就像给每个像素 “化妆”,让它们看起来更真实。
关键算法原理
1 菲涅尔反射(Fresnel Reflection)
菲涅尔反射描述了光线在不同介质表面反射和折射的比例随视角变化的现象。简单来说,当我们垂直观察物体表面时,反射光较少;而从倾斜角度观察时,反射光会增多。在 PBR 中,菲涅尔反射用于模拟物体表面的光泽度变化。
half3 F0 = lerp(half3(0.04, 0.04, 0.04), baseColor, metallic);
half3 F = FresnelSchlick(max(dot(normalWS, viewDir), 0.0), F0);
F0:表示表面在垂直入射时的反射率。对于非金属材质,F0 通常取一个固定值 (0.04, 0.04, 0.04);对于金属材质,F0 等于基础颜色 baseColor。这里使用 lerp 函数根据 metallic 值在两者之间进行插值。
FresnelSchlick:是一个常用的菲涅尔反射近似公式,其定义如下:
half3 FresnelSchlick(half cosTheta, half3 F0) {return F0 + (1.0 - F0) * pow(1.0 - cosTheta, 5.0);
}
其中 cosTheta 是法线和视线方向的点积,表示视角与表面法线的夹角余弦值。
2 法线分布函数(Normal Distribution Function,NDF)
法线分布函数用于描述微表面的法线方向分布情况,它决定了表面的粗糙度对反射光的影响。在这个示例中,使用的是 GGX(Trowbridge-Reitz GGX)法线分布函数。
half NDF = DistributionGGX(normalWS, viewDir, roughness);
half DistributionGGX(half3 N, half3 H, half roughness) {half a = roughness * roughness;half a2 = a * a;half NdotH = max(dot(N, H), 0.0);half NdotH2 = NdotH * NdotH;half nom = a2;half denom = (NdotH2 * (a2 - 1.0) + 1.0);denom = PI * denom * denom;return nom / denom;
}
其中 N 是表面法线,H 是半程向量(光照方向和视线方向的中间向量),roughness 是表面的粗糙度。
3 几何遮挡函数(Geometry Function)
几何遮挡函数用于模拟微表面之间的相互遮挡和阴影效果,它考虑了光线在微表面间传播时的衰减。这里使用的是 Smith 几何遮挡函数。
half G = GeometrySmith(normalWS, viewDir, lightDir, roughness);
half GeometrySchlickGGX(half NdotV, half k) {half nom = NdotV;half denom = NdotV * (1.0 - k) + k;return nom / denom;
}half GeometrySmith(half3 N, half3 V, half3 L, half roughness) {half k = (roughness + 1.0) * (roughness + 1.0) / 8.0;half G1 = GeometrySchlickGGX(max(dot(N, V), 0.0), k);half G2 = GeometrySchlickGGX(max(dot(N, L), 0.0), k);return G1 * G2;
}
其中 N 是表面法线,V 是视线方向,L 是光照方向,roughness 是表面的粗糙度。
漫反射和镜面反射计算
在 PBR 中,漫反射和镜面反射是光照计算的核心部分。
// 计算漫反射项
half3 kD = (1.0 - F) * (1.0 - metallic);
half3 diffuse = kD * baseColor / PI;// 计算镜面反射项
half3 numerator = NDF * G * F;
half denominator = 4.0 * max(dot(normalWS, viewDir), 0.0) * max(dot(normalWS, lightDir), 0.0) + 0.001;
half3 specular = numerator / denominator;
- 漫反射项:kD 表示漫反射比例,它是通过 (1.0 - F) * (1.0 - metallic) 计算得到的。F
是菲涅尔反射系数,metallic 是金属度。diffuse 是最终的漫反射颜色,通过 kD 乘以基础颜色 baseColor 并除以
PI 得到。 镜面反射项:镜面反射项的计算使用了前面计算得到的 NDF、G 和
F。分子是它们的乘积,分母是一个与法线、视线和光照方向点积相关的值,加上一个小的常量 0.001 是为了避免除零错误。
最终光照计算
最后,将漫反射、镜面反射和环境光相加得到最终的光照颜色
// 计算光照强度
half NdotL = max(dot(normalWS, lightDir), 0.0);
half3 Lo = (diffuse + specular) * mainLight.color * NdotL;// 环境光
half3 ambient = unity_AmbientSky.rgb * baseColor;// 最终颜色
half3 finalColor = ambient + Lo;
Lo:表示直接光照的贡献,它是漫反射和镜面反射之和乘以主光源颜色 mainLight.color 再乘以 NdotL(法线和光照方向的点积)。
ambient:表示环境光的贡献,通过环境光颜色 unity_AmbientSky.rgb 乘以基础颜色 baseColor 得到。
finalColor:最终的颜色是环境光和直接光照的总和。
这些关键算法共同构成了 PBR 光照模型,使得物体表面的光照效果更加真实和自然。
完整代码及注释
使用 Unity Shader 实现基于物理渲染(PBR)的示例代码,代码中带有详细注释
Shader "Custom/PBRShader" {Properties {// 基础颜色纹理,就像给物体穿上一件彩色的外套_BaseMap ("Base Map", 2D) = "white" {}// 基础颜色,相当于外套的底色,默认是白色_BaseColor ("Base Color", Color) = (1,1,1,1)// 金属度纹理,用来决定物体像不像金属,0 是塑料,1 是纯金属_MetallicMap ("Metallic Map", 2D) = "white" {}// 金属度数值,和纹理一起控制金属特性_Metallic ("Metallic", Range(0,1)) = 0// 粗糙度纹理,粗糙度越大,物体表面越粗糙,就像砂纸一样_RoughnessMap ("Roughness Map", 2D) = "white" {}// 粗糙度数值,进一步微调表面粗糙程度_Roughness ("Roughness", Range(0,1)) = 0.5// 法线纹理,让物体表面看起来有凹凸感,就像给它加了一层“皱纹”_NormalMap ("Normal Map", 2D) = "bump" {}}SubShader {Tags { "RenderType"="Opaque" }LOD 100Pass {HLSLPROGRAM// 开启多编译,支持前向渲染的各种光照类型#pragma multi_compile_fwdbase// 定义顶点着色器和片段着色器的函数名#pragma vertex vert#pragma fragment frag// 引入 Unity 的核心 HLSL 库,里面有很多好用的工具函数#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"// 引入光照相关的 HLSL 库,处理光照计算就靠它啦#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"// 定义属性对应的变量struct appdata {// 顶点位置,就像物体在 3D 世界中的“坐标”float4 vertex : POSITION;// 顶点法线,告诉我们物体表面的朝向float3 normal : NORMAL;// 纹理坐标,用于定位纹理在物体上的位置float2 uv : TEXCOORD0;// 切线,辅助计算法线纹理float4 tangent : TANGENT;};struct v2f {// 裁剪空间下的顶点位置,是顶点在屏幕上的“投影”float4 vertex : SV_POSITION;// 纹理坐标,传递给片段着色器float2 uv : TEXCOORD0;// 世界空间下的顶点位置,用于光照计算float3 worldPos : TEXCOORD1;// 世界空间下的法线方向half3 worldNormal : TEXCOORD2;// 世界空间下的切线方向half3 worldTangent : TEXCOORD3;// 世界空间下的副切线方向half3 worldBitangent : TEXCOORD4;};// 定义属性变量sampler2D _BaseMap;float4 _BaseMap_ST;half4 _BaseColor;sampler2D _MetallicMap;half _Metallic;sampler2D _RoughnessMap;half _Roughness;sampler2D _NormalMap;// 顶点着色器,把顶点从模型空间转换到裁剪空间v2f vert (appdata v) {v2f o;// 把顶点位置从模型空间转换到裁剪空间o.vertex = TransformObjectToHClip(v.vertex.xyz);// 传递纹理坐标o.uv = TRANSFORM_TEX(v.uv, _BaseMap);// 把顶点位置从模型空间转换到世界空间o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;// 把法线从模型空间转换到世界空间o.worldNormal = TransformObjectToWorldNormal(v.normal);// 把切线从模型空间转换到世界空间o.worldTangent = TransformObjectToWorldDir(v.tangent.xyz);// 计算副切线,通过叉积得到o.worldBitangent = cross(o.worldNormal, o.worldTangent) * v.tangent.w;return o;}// 片段着色器,计算每个像素的颜色half4 frag (v2f i) : SV_Target {// 采样基础颜色纹理half4 baseMap = tex2D(_BaseMap, i.uv);// 应用基础颜色half3 baseColor = baseMap.rgb * _BaseColor.rgb;// 采样金属度纹理half metallicMap = tex2D(_MetallicMap, i.uv).r;// 结合金属度数值half metallic = metallicMap * _Metallic;// 采样粗糙度纹理half roughnessMap = tex2D(_RoughnessMap, i.uv).r;// 结合粗糙度数值half roughness = roughnessMap * _Roughness;// 采样法线纹理half4 normalMap = tex2D(_NormalMap, i.uv);// 把法线从切线空间转换到世界空间half3 normalTS = UnpackNormal(normalMap);half3x3 tangentToWorld = half3x3(i.worldTangent, i.worldBitangent, i.worldNormal);half3 normalWS = mul(normalTS, tangentToWorld);// 获取主光源信息Light mainLight = GetMainLight();// 计算视线方向half3 viewDir = SafeNormalize(_WorldSpaceCameraPos.xyz - i.worldPos);// 计算光照方向half3 lightDir = mainLight.direction;// 计算 PBR 光照模型所需的参数// 计算菲涅尔反射half3 F0 = lerp(half3(0.04, 0.04, 0.04), baseColor, metallic);half3 F = FresnelSchlick(max(dot(normalWS, viewDir), 0.0), F0);// 计算法线分布函数half NDF = DistributionGGX(normalWS, viewDir, roughness);// 计算几何遮挡函数half G = GeometrySmith(normalWS, viewDir, lightDir, roughness);// 计算漫反射项half3 kD = (1.0 - F) * (1.0 - metallic);half3 diffuse = kD * baseColor / PI;// 计算镜面反射项half3 numerator = NDF * G * F;half denominator = 4.0 * max(dot(normalWS, viewDir), 0.0) * max(dot(normalWS, lightDir), 0.0) + 0.001;half3 specular = numerator / denominator;// 计算光照强度half NdotL = max(dot(normalWS, lightDir), 0.0);half3 Lo = (diffuse + specular) * mainLight.color * NdotL;// 环境光half3 ambient = unity_AmbientSky.rgb * baseColor;// 最终颜色half3 finalColor = ambient + Lo;return half4(finalColor, 1.0);}ENDHLSL}}FallBack "Diffuse"
}
相关文章:
用Shader glsl实现一个简单的PBR光照模型
PBR模型定义了各种光照属性,如基础颜色、金属度、粗糙度等,就像给物体设定各种 “性格特点”。顶点着色器负责把顶点从模型空间转换到裁剪空间,同时计算一些用于光照计算的参数,就像给顶点 “搬家” 并准备好 “行李”。而片段着色…...
Linux系统使用ollama本地安装部署DeepSeekR1 + open-webui
Linux系统使用ollama本地安装部署DeepSeekR1 open-webui 1. 首先,下载安装ollama #下载安装脚本并执行 curl -fsSL https://ollama.com/install.sh | sh #安装完成后查看ollama版本 ollama --version2. 使用ollama下载deepseek #不同的参数规格对硬件有不同的要…...
学习星开源在线考试教育系统
学习星开源考试系统 项目介绍 项目概述: 学习星在线考试系统是一款基于Java和Vue.js构建的前后端分离的在线考试解决方案。它旨在为教育机构、企业和个人提供一个高效、便捷的在线测试平台,支持多种题型,包括但不限于单选题、多选题、判断…...
树莓派通过手机热点,无线连接PC端电脑,进行远程操作
树莓派通过手机热点实现无线连接具有以下几点优势: 1.该方式能够联网,方便在项目开发时下载一些数据包。 2.该方式能够通过手机端查看树莓派IP地址(有些情况树莓派ip地址会发生改变) 借鉴链接如下: 树莓派的使用网线及无线连接方法及手机…...
【工业安全】-CVE-2022-35561- Tenda W6路由器 栈溢出漏洞
文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1:代码分析 4.2:流量分析 5.poc代码: 1.漏洞描述 漏洞编号:CVE-2022-35561 漏洞名称:Tenda W6 栈溢出漏洞 威胁等级:高危 漏洞详情࿱…...
Windows环境管理多个node版本
前言 在实际工作中,如果我们基于Windows系统开发,同时需要维护老项目,又要开发新项目,且不同项目依赖的node版本又不同时,那么就需要根据项目切换不同的版本。本文使用Node Version Manager(nvm࿰…...
git 沙盒 下(二)
url :Learn Git Branching 高级git 多次Rebase 最开始我先把bugFix分支先rebase到main上,之后再把c7合并到c6 ,之后就差合并为一个分支了,但是无论移动c7还是another分支都无法合并,都会在原地停留 后来根据提示最…...
基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现
基于JavaSpringmvcmyabtishtml的鲜花商城系统设计和实现 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系…...
vue-plugin-hiprint (vue2
页面效果 <template><div><div class"d-flex flex-column mt5"><div class"d-flex flex-row " style"margin-bottom: 10px;justify-content: center;"><!-- 纸张大小 A3、A4 等 --><div class"paper&quo…...
网站地址栏怎么变成HTTPS开头?
在当今的数字世界中,网络安全已成为不可或缺的一部分。对于网站管理员和所有者来说,确保访问者数据的安全和隐私至关重要。HTTPS是一种加密的通信协议,通过在客户端和服务器之间建立安全连接来保护数据传输。将网站从HTTP升级到HTTPS不仅提升…...
手机用流量怎样设置代理ip?
互联网各领域资料分享专区(不定期更新): Sheet...
Web渗透实战--XSS 常用语句以及绕过思路
Web渗透实战–XSS 常用语句以及绕过思路 0x01:干货 - XSS 测试常用标签语句 0x0101: 标签 <!-- 点击链接触发 - JavaScript 伪协议 --><a hrefjavascript:console.log(1)>XSS1</a> <!-- 字符编码绕过 - JavaScript 伪协议 -->&…...
哈希表-两个数的交集
代码随想录-刷题笔记 349. 两个数组的交集 - 力扣(LeetCode) 内容: 集合的使用 , 重复的数剔除掉,剩下的即为交集,最后加入数组即可。 class Solution {public int[] intersection(int[] nums1, int[] nums2) {Set<Integer…...
“数字+实体“双引擎发力树莓集团打造翠屏区首个智慧产业孵化标杆
2025 年 2 月 13 日,宜宾市翠屏区招商引资项目集中签约活动圆满举行。树莓集团产业合作总监童曦鸣代表企业出席并签约,将在翠屏区打造数字经济示范项目。 此次签约,树莓集团将以 “数字 实体” 双引擎发力。在数字产业化方面,凭…...
PostgreSQL 数据库压力测试指南
一、为什么需要压力测试? 数据库需要进行压力测试的原因主要包括以下几个方面: 性能评估:通过压力测试,可以了解数据库在高负载情况下的性能表现,包括响应时间、吞吐量和资源利用率等。这有助于确定系统的性能瓶颈。 …...
npm : 无法加载文件 C:\nvm\v20.11.1\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅
在vscode中运行前端项目时npm run dev 报错:npm : 无法加载文件 C:\nvm\v20.11.1\npm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1…...
-bash:/usr/bin/rm: Argument list too long 解决办法
问题概述 小文件日志太多导致无法使用rm命令,因为命令行参数列表的长度超过了系统允许的最大值。 需要删除/tmp目录下的所有文件,文件数量比较多。 ls -lt /tmp | wc -l 5682452 解决方法如下: 使用find -exec 遍历,然后执行删…...
【deepseek 部署中的常见问题及解决方案--亲测有效】
deepseek 部署中的常见问题及解决方案 一、环境与安装相关问题二、配置相关问题三、运行与性能问题四、其他常见问题 一、环境与安装相关问题 Python版本不兼容 问题描述:在部署DeepSeek时,系统提示Python版本不兼容。解决方法:DeepSeek推荐…...
【React】react-redux+redux-toolkit实现状态管理
安装 npm install reduxjs/toolkit react-reduxRedux Toolkit 是官方推荐编写Redux的逻辑方式,用于简化书写方式React-redux 用来链接Redux和React组件之间的中间件 使用 定义数据 创建要管理的数据模块 store/module/counter.ts import { createSlice, Payloa…...
LabVIEW用户界面(UI)和用户体验(UX)设计
作为一名 LabVIEW 开发者,满足功能需求、保障使用便捷与灵活只是基础要求。在如今这个用户体验至上的时代,为 LabVIEW 应用程序设计直观且具有美学感的界面,同样是不容忽视的关键任务。一个优秀的界面设计,不仅能提升用户对程序的…...
期权帮 | 场外个股期权可以做吗,风险高吗?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 场外个股期权可以做吗,风险高吗? 场外个股期权,就是在正式的交易所之外进行交易的个股期权。 注:这里的“场外”指的是这类交易不在像沪深…...
【Viper】配置格式与支持的数据源与go案例
Viper 是一个用于 Go 应用程序的配置管理库,支持多种配置格式和数据源。 安装依赖 go get github.com/spf13/viper go get github.com/spf13/viper/remote go get go.etcd.io/etcd/client/v3"github.com/spf13/viper/remote"要写在etcd客户端import里 1…...
【工具变量】地级市数字基础设施水平数据(2003-2024年)
一、数据来源:数据涵盖了2003-2024年间地级市新型数字基础设施的发展水平测量值。数据的核心来自地方政府工作报告中提及的相关词汇,并通过对这些报告的分词和频次统计,得出每个城市在该领域的数字基础设施发展水平。 数据覆盖全国285个地级市…...
Ae:常见的光照控件和材质控件
在 After Effects中,几种模拟效果都有类似的光照控件和材质控件,比如,焦散、卡片动画、碎片等。 光照控件和材质控件允许用户模拟不同光源、阴影和高光效果,控制表面反射特性,从而实现真实的光照和反射模拟。适用于材质…...
POI 的 Excel 读写操作教程
POI 的 Excel 读写操作教程 一、POI 简介 Apache POI 是一款在 Java 开发中广受欢迎的开源库,主要用于处理各种 Microsoft Office 文件格式,Excel 文件便是其中之一。凭借其功能强大的 API,POI 不仅支持对 Excel 文件的读取、写入和修改&am…...
java处理pgsql的text[]类型数据问题
背景 公司要求使用磐维数据库,于是去了解了这个是基于PostgreSQL构建的,在使用时有场景一条图片数据中可以投放到不同的页面,由于简化设计就放在数组中,于是使用了text[]类型存储;表结构 #这是一个简化版表结构&…...
数据结构:Map Set(一)
目录 一、搜索树 1、概念 2、查找 3、插入 4、删除 二、搜索 1、概念及场景 2、模型 (1)纯key模型 (2)Key-Value模型 三、Map的使用 1、什么是Map? 2、Map的常用方法 (1)V put(K …...
Ansible 自动化 Linux 运维:解放你的双手,让运维变得简单
Ansible 自动化 Linux 运维:解放你的双手,让运维变得简单 在现代 IT 运维中,随着系统规模的不断扩展,如何高效地管理和维护大量的服务器成为了一项巨大挑战。传统的手动操作不仅费时费力,还容易出错。而 Ansible 作为一款开源的自动化运维工具,凭借其易用性和强大的功能…...
不需要移植和配置xinetd 等相类似执行文件,tftp-hpa服务器交叉移植使用说明
tftp-hpa-5.2.tar.gz :下载链接 https://download.csdn.net/download/lyeffort/90361414 tar -xvf tftp-hpa-5.2.tar.gz -C /root/tftpd/ # ./autogen.sh # export PATH/root/linux-arm-tools/mips-linux-gclibc/bin:$PATH # mkdir /root/tftpd/install # ./configure --h…...
利用用个人PC搭建私有大模型(低成本、易实施的私有大模型部署方案,兼顾英语 5G协议学习与实践需求)
背景 个人有2台电脑, 第一台: laptop cpu 12th Gen Intel Core™ i7-1260P 2.10 GHz, GPU intel iris Xe graphics, 第二台: MS-7D22,Intel Core™ i5-10400F CPU 2.90GHz, GeForce GT 730。想…...
SAP 借助 Databricks 推出Business Data Cloud
SAP与Databricks合作推出了SAP Business Data Cloud,这是一项突破性的解决方案,旨在统一和整合企业内所有SAP及第三方数据,为企业提供可信的数据基础,从而推动更具影响力的决策并促进可靠的AI应用。这一合作标志着企业数据管理的新…...
地基Spring中bean生命周期和设计模式
面试问题: 在Java面试中,当被提问到Spring中Bean的生命周期和设计模式时,你可以按照以下方式回答,以体现自己的专业知识和实际项目经验: Spring中Bean的生命周期 Spring中Bean的生命周期是一个复杂但有序的过程&#…...
CanMV的刷新比Openmv强
今天使用CanMV k230的板子,发现CanMV的刷新比Openmv强,速度快,不用再次拍照刷新,写一次就能在ide屏幕上同时显示。 参考一下CanMV K230拍照保存Demo - CanMV(K210 / K230) - 01科技 | 01Studio Takephot(…...
Xilinx kintex-7系列 FPGA支持PCIe 3.0 吗?
Xilinx kintex-7系列资源如下图 Xilinx各系列的GT资源类型和性能 PCIe Gen1/2/3的传输速率对比 K7上面使用的高速收发器GTX最高速率为12.5GT/s, PCIe Gen2 每个通道的传输速率为 5 GT/s。 PCIe Gen3 每个通道的传输速率为 8 GT/s。 所以理论上硬件支持PCIe3.0&#…...
蓝桥杯篇---实时时钟 DS1302
文章目录 前言特点简介1.低功耗2.时钟/日历功能3.32字节的额外RAM4.串行接口 DS1302 引脚说明1.VCC12.VCC23.GND4.CE5.I/O6.SCLK DS1302 寄存器1.秒寄存器2.分钟寄存器3.小时寄存器4.日寄存器5.月寄存器6.星期寄存器7.年寄存器8.控制寄存器 DS1302 与 IAP25F2K61S2 的连接1.CE连…...
【蓝桥杯嵌入式】8_IIC通信-eeprom读写
全部代码网盘自取 链接:https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码:3ii2 1、电路图 这个电路允许通过I2C总线与EEPROM(M24C02-WMN6TP)和数字电位器(MCP4017T-104ELT)进行通信。EEPROM用于存储数据,而数字电位器可以用…...
支持向量机原理
支持向量机(简称SVM)虽然诞生只有短短的二十多年,但是自一诞生便由于它良好的分类性能席卷了机器学习领域。如果不考虑集成学习的算法,不考虑特定的训练数据集,尤其在分类任务中表现突出。在分类算法中的表现SVM说是排…...
E8移动建模关联建模表单,写入无数据
场景:移动建模新建一个招聘页面,每次通过移动建模写入建模表数据,建模表的值都要权限重构才可看见,且明细无数据。 排查原因:移动建模提交后返回的ID值为空 正常情况下提交数据应该要返回一个ID值如下: 解…...
一文深入了解DeepSeek-R1:模型架构
本文深入探讨了 DeepSeek-R1 模型架构。让我们从输入到输出追踪 DeepSeek-R1 模型,以找到架构中的新发展和关键部分。DeepSeek-R1 基于 DeepSeek-V3-Base 模型架构。本文旨在涵盖其设计的所有重要方面。 📝 1. 输入上下文长度 DeepSeek-R1的输入上下文长…...
腿足机器人之二- 运动控制概览
腿足机器人之二运动控制概览 高层运动规划MPCRL 中层逆运动学和逆动力学底层执行器控制传感器校正 上一篇博客是腿足机器人的骨架和关节的机械和电气组件,关节不仅需要通过机械设计实现复杂的运动能力,还必须通过电子组件和控制系统来精确控制这些运动。…...
前端面试大全
前端面试大全 一、htmlcss1、垂直定位的实现方式 二、javascript1、深拷贝浅拷贝2、作用域3、原型原型链4、防抖节流5、设计模式 三、ES61、 四、typescript五、vue1、vue2和vue3的区别2、生命周期3、computedwatch 六、react七、uni-app八、Cesiumopenlayer九、Threejs十、ngi…...
如何使用智能化RFID管控系统,对涉密物品进行安全有效的管理?
载体主要包括纸质文件、笔记本电脑、优盘、光盘、移动硬盘、打印机、复印机、录音设备等,载体(特别是涉密载体)是各保密、机要单位保证涉密信息安全、防止涉密信息泄露的重要信息载体。载体管控系统主要采用RFID射频识别及物联网技术…...
Python 调用 DeepSeek API 案例详细教程
本案例为以 Python 为例的调用 DeepSeek API 的小白入门级详细教程 步骤 先注册并登录 DeepSeek 官网:https://www.deepseek.com/ 手机号验证码注册或登录即可 创建 API KEY 注意保存,写代码时必须提供的 打开 Pycharm 创建工程 并安装 OpenAI 库编写代…...
牛客面筋学习
准备阶段: 楼主其实很早就开始准备了,大概从年初开始,陆陆续续总结自己的项目,复盘,然后复习数电模电信号电路等,复习完后,便开始刷题;顺便说一下,如果需要发小论文的也…...
对指针的深入运用-通讯录的初步实现
1.通讯录的功能 手机里的通讯录,是能够存放联系人的信息,包括姓名,性别,地址,电话号码,也可以加上性别。而且手机中的通讯录肯定有增删查改的功能,而且在list里是按照顺序排序的,可以…...
VUE环境搭建
node.js安装 node npm – node Package Management 安装完成后,需要设置: npm config set prefix "D:\nodejs"注意:“D:\nodejs” 此处为自己安装的node.js路径。管理员身份运行 切换镜像源 npm config set registry https://r…...
DeepSeek应用——与PyCharm的配套使用
目录 一、配置方法 二、使用方法 三、注意事项 1、插件市场无continue插件 2、无结果返回,且在本地模型报错 记录自己学习应用DeepSeek的过程,使用的是自己电脑本地部署的私有化蒸馏模型...... (举一反三,这个不单单是可以用…...
C# ASP.NET的未来发展趋势
.NET学习资料 .NET学习资料 .NET学习资料 在快速发展的技术浪潮中,C# ASP.NET不断顺应时代潮流,展现出一系列令人瞩目的未来发展趋势。这些趋势不仅反映了技术的进步,也为开发者带来了更多的机遇和挑战。 云原生应用开发 随着云计算的普及…...
leetcode 416. 分割等和子集
题目如下 数据范围 本题和leetcode 2915. 和为目标值的最长子序列的长度类似,这里不过多赘述。leetcode 2915. 和为目标值的最长子序列的长度 通过代码 class Solution { public:bool canPartition(vector<int>& nums) {int n nums.size();int an…...
WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景
WPF进阶 | 深入 WPF 依赖项属性:理解其强大功能与应用场景 前言一、依赖项属性基础概念1.1 什么是依赖项属性1.2 依赖项属性与 CLR 属性的区别1.3 依赖项属性的定义与注册 二、依赖项属性的原理深入剖析2.1 依赖项属性系统的工作机制2.2 元数据(Metadata…...