最新要闻
- 每日讯息!中邮策略:央行降息提振信心 市场有望震荡上行
- 吃小龙虾戴了手套 为啥还是满手油? 每日快看
- 天天精选!AMD做了一个201MB缓存的怪物!可惜流产了
- 今年“6·18”河南消费力全国第八!胡辣汤、洛阳汉服、河南老字号美食全国热卖
- 政治权利名词解释电大 政治权利名词解释 最新资讯
- 微软确认月初遭DDoS网络攻击:一度导致Microsoft 365服务中断
- 终末的女武神同人 毗沙门天VS宇智波斑-资讯
- 249元 雷柏推出VT9S无线鼠标:原相3395引擎、26000 DPI|全球微头条
- 大四男生实习薪资1万4妈妈仰天大笑 姐姐回应:要在船上写论文 全球聚焦
- 一箭41星创中国纪录!当天传回超清大图:英格兰一览无余 环球观察
- 全球热讯:拜耳医药保健有限公司属于哪个国家_拜耳公司是哪个国家
- 天天快消息!苹果M2 Ultra首次开盖:Intel 56核心相形见绌
- “迈克·马龙,你为什么不买詹姆斯的账?”
- 东土科技:定增募资不超8.75亿元申请获证监会注册批复 环球热文
- 当前滚动:最便宜折叠手机!moto razr 40开售:3999元起
- 官方通报“特校校长刘某某强制猥亵残障学生案”
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【Unity3D】法线贴图和凹凸映射 视点
1 法线贴图原理
表面着色器中介绍了使用表面着色器进行法线贴图,实现简单快捷。本文将介绍使用顶点和片元着色器实现法线贴图和凹凸映射,实现更灵活。
本文完整代码资源见→法线贴图和凹凸映射。
(资料图片)
1)光照原理
Phong 光照模型和 Blinn Phong 光照模型是应用比较广泛的光照模型,两者区别在与镜面反射光的计算,Phong 光照模型根据反向量和观察向量计算镜面反射光,Blinn Phong 光照模型根据半向量和法向量计算镜面反射光。
光照计算如下:
// 模型自身颜色fixed4 albedo = tex2D(_MainTex, i.uv) * _ModelColor;// 环境光fixed4 ambient = UNITY_LIGHTMODEL_AMBIENT * albedo;// 漫反射光fixed4 diffuse = _LightColor0 * albedo * max(0, dot(normal, lightDir)); // 镜面反射光(Phong光照模型)// fixed4 specular = _LightColor0 * _Specular * pow(max(0, dot(reflectDir, viewDir)), _Gloss); // 镜面反射光(Blinn Phong光照模型)fixed4 specular = _LightColor0 * _Specular * pow(max(0, dot(normal, halfDir)), _Gloss); // 合成颜色fixed4 finalColor = fixed4(ambient + diffuse + specular, 1.0);
其中,_MainTex 表示 主纹理,_ModelColor、_LightColor0 分别表示模型颜色、灯光颜色,UNITY_LIGHTMODEL_AMBIENT 表示环境光强度,normal、lightDir、viewDir、halfDir 分别表示法向量、灯光向量、观察向量、半向量(见上图,它们都已归一化)。
2)法线纹理
如下,左侧是纹理图,右侧是其对应的法线纹理图。
法线向量归一化后,每个分量的值域是 [-1, 1],为了使用 RGB 颜色显示法线向量,需要将法线向量映射到区间 [0, 1],映射函数是:y = (x + 1) / 2;由法线纹理还原到法线向量,映射函数是:y = x * 2 - 1。由于法线向量都是归一化的,并且方向始终是由内侧指向外侧,因此可以省去 z 维的存储空间,通过 z = sqrt(x * x + y * y) 推出 z 值。
由法线纹理获取法线向量的方法如下:
fixed4 packedNormal = tex2D(_NormalTex, i.uv);fixed3 tangentNormal = UnpackNormal(packedNormal); // 切线空间法线向量// 如果法线纹理未被标记为"Normal map", 可以使用以下方式求出法线纹理中片元的法线值// tangentNormal.xy = (packedNormal.xy * 2 - 1) * _BumpScale;// tangentNormal.z = sqrt(1.0 - saturate(dot(tangentNormal.xy, tangentNormal.xy)));
说明:法线纹理需要设置 Texture Type 为 Normal map,如下,否则 UnpackNormal 函数会失效,需要使用注释中的代码还原法线向量。其中,_BumpScale 反映了物体表面的凹凸程度。
3)切线空间
从法线纹理图中采样并通过 UnpackNormal 还原后得到的法线向量,是切线空间中的向量,切线空间坐标系的定义如下。注意:切线空间坐标系是右手坐标系。
切线空间坐标轴正方向单位向量对应的世界坐标系中的向量如下:
struct a2v {float4 vertex : POSITION; // 模型空间顶点坐标float3 normal : NORMAL; // 模型空间法线坐标(几何法线, 非纹理法线)float4 tangent : TANGENT; // 模型空间切线坐标(几何切线, 非纹理切线)};v2f vert(a2v v) {v2f o;fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); // 法线(z轴)fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); // 切线(x轴)fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; // 副切线(y轴)return o;}
说明: worldTangent、worldBinormal、worldNormal 分别为切向空间坐标系 x、y、z 轴正方向单位向量(世界坐标系下的坐标)。
4)切线空间与世界空间的变换
漫反射和镜面反射光照计算使用了法线向量、灯光向量、观察向量,但是它们所处的坐标系不相同,为方便计算光照,需要统一坐标系,即将纹理法线向量由切线坐标系转换到世界坐标系,或者将灯光向量和观察向量由世界坐标系转换到切线坐标系。注意,之所以不在模型空间计算光照(即将法线向量、灯光向量、观察向量转换到模型空间,再进行光照计算),因为如果模型变换中存在非统一缩放,会导致世界空间下的法线与切线不垂直,详见空间和变换 中 2.5 节法线变换。
假设切线空间 x、y、z 坐标轴正方向单位向量对应的世界坐标系中的向量分别为 r、u、f(即上文中的 worldTangent、worldBinormal、worldNormal),世界坐标系下 x、y、z 轴正方向对应的方向向量分别为 e1、e2、e3,因此存在以下关系:
由于 r、u、f 两两正交,并且都是单位向量,因此它们组成的的矩阵是正交矩阵,即 A-1 = A",因此 e1、e2、e3 在一组基向量 r、u、f 下的表示如下:
切线坐标系下的任意向量 v 对应的世界坐标系下的向量如下:
因此,切线空间→世界空间的变换矩阵如下:
世界坐标系下的任意向量 v 对应的切线坐标系下的向量如下:
因此,世界空间→切线空间的变换矩阵如下:
5)切线坐标系下法线向量对应的世界坐标系坐标
// 1. 计算[切线空间->世界空间]的变换矩阵fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); // 法线(z轴)fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); // 切线(x轴)fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; // 副切线(y轴)float3x3 tangentToWorld = transpose(float3x3(worldTangent, worldBinormal, worldNormal)); // 切线空间->世界空间// 2. 计算切线空间的法线向量fixed4 packedNormal = tex2D(_NormalTex, i.uv.zw);fixed3 tangentNormal = UnpackNormal(packedNormal); // 切线空间法线向量// 3. 计算世界空间的法线向量float3 normal = mul(tangentToWorld, tangentNormal);
6)世界坐标系下灯光向量、观察向量对应的切线坐标系坐标
// 1. 计算[世界空间->切线空间]的变换矩阵fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); // 法线(z轴)fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); // 切线(x轴)fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; // 副切线(y轴)float3x3 worldToTangent = float3x3(worldTangent, worldBinormal, worldNormal); // 世界空间->切线空间// 2. 计算切线空间的灯光向量、观察向量float3 lightDir = mul(worldToTangent, WorldSpaceLightDir(v.vertex));float3 viewDir = mul(worldToTangent, WorldSpaceViewDir(v.vertex));
7)凹凸映射
为了使物体表面呈现动态凹凸变化,可以通过以下方式动态调整法线。
fixed4 packedNormal = tex2D(_NormalTex, i.uv); // 法线纹理采样fixed3 tangentNormal = UnpackNormal(packedNormal); // 切线空间法线向量tangentNormal.xy *= _BumpScale; // 法线凹凸映射tangentNormal.z = sqrt(1.0 - saturate(dot(tangentNormal.xy, tangentNormal.xy))); // 重新调整法线z值
2 切线空间中计算光照
NormalMapInTangentSpace.shader
Shader "MyShader/NormalMapInTangentSpace" {Properties {_Color ("Color", Color) = (1, 1, 1, 1) // 贴图颜色_MainTex ("MainTex", 2D) = "white" {} // 主纹理_NormalTex ("NormalTex", 2D) = "bump" {} // 法线纹理_BumpScale ("Bump Scale", Range(-2, 2)) = -2 // 法线纹理凹凸比例_Specular ("Specular", Color) = (1, 1, 1, 1) // 镜面反射颜色_Gloss ("Gloss", Range(8.0, 256)) = 20 // 镜面反射光泽度}SubShader {Pass { Tags { "LightMode"="ForwardBase" }CGPROGRAM#pragma vertex vert#pragma fragment frag#include "Lighting.cginc"fixed4 _Color; // 贴图颜色sampler2D _MainTex; // 主纹理float4 _MainTex_ST; // 主纹理缩放和偏移sampler2D _NormalTex; // 法线纹理float4 _NormalTex_ST; // 法线纹理缩放和偏移float _BumpScale; // 法线纹理凹凸比例fixed4 _Specular; // 镜面反射光颜色float _Gloss; // 镜面反射光泽度struct a2v {float4 vertex : POSITION; // 模型空间顶点坐标float3 normal : NORMAL; // 模型空间法线坐标(仅用于构造世界空间到切线空间的变换矩阵)float4 tangent : TANGENT; // 模型空间切线坐标(仅用于构造世界空间到切线空间的变换矩阵)float2 texcoord : TEXCOORD0; // 纹理坐标};struct v2f {float4 pos : SV_POSITION; // 裁剪空间顶点坐标float4 uv : TEXCOORD0; // xy存储主纹理坐标, zw存储法线纹理坐标float3 lightDir: TEXCOORD1; // 切线空间光线向量(顶点指向光源)float3 viewDir : TEXCOORD2; // 切线空间观察向量(顶点指向相机)};v2f vert(a2v v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex); // 模型空间顶点坐标变换到裁剪空间顶点坐标, 等价于: mul(UNITY_MATRIX_MVP, v.vertex)o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; // 主纹理缩放和偏移o.uv.zw = v.texcoord.xy * _NormalTex_ST.xy + _NormalTex_ST.zw; // 法线纹理缩放和偏移// 世界空间法线、切线、副切线fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; // 世界空间坐标变换到切线空间坐标的变换矩阵float3x3 worldToTangent = float3x3(worldTangent, worldBinormal, worldNormal);// 将光线向量、观察向量由世界空间变换到切线空间o.lightDir = mul(worldToTangent, WorldSpaceLightDir(v.vertex));o.viewDir = mul(worldToTangent, WorldSpaceViewDir(v.vertex));// 如果模型变换中不包含非统一缩放, 可以将光线向量和观察向量直接由模型空间变换到切线空间, 而不必先转换到世界空间// float3 objectBinormal = cross(normalize(v.normal), normalize(v.tangent.xyz) ) * v.tangent.w;// float3x3 objectToTangent = float3x3(v.tangent.xyz, objectBinormal, v.normal);// o.lightDir = mul(objectToTangent, ObjSpaceLightDir(v.vertex));// o.viewDir = mul(objectToTangent, ObjSpaceViewDir(v.vertex));return o;}fixed4 frag(v2f i) : SV_Target {fixed3 tangentLightDir = normalize(i.lightDir); // 切线空间光线向量归一化fixed3 tangentViewDir = normalize(i.viewDir); // 切线空间观察向量归一化fixed4 packedNormal = tex2D(_NormalTex, i.uv.zw); // 法线纹理采样fixed3 tangentNormal = UnpackNormal(packedNormal); // 切线空间法线向量// 如果法线纹理未被标记为"Normal map", 可以使用以下方式求出法线纹理中片元的法线值//tangentNormal.xy = (packedNormal.xy * 2 - 1) * _BumpScale;//tangentNormal.z = sqrt(1.0 - saturate(dot(tangentNormal.xy, tangentNormal.xy)));tangentNormal.xy *= _BumpScale; // 法线凹凸映射tangentNormal.z = sqrt(1.0 - saturate(dot(tangentNormal.xy, tangentNormal.xy))); // 重新调整法线z值fixed3 albedo = tex2D(_MainTex, i.uv).rgb * _Color.rgb; // 物体自身颜色fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo; // 环境光fixed3 diffuse = _LightColor0.rgb * albedo * max(0, dot(tangentNormal, tangentLightDir)); // 漫反射光fixed3 halfDir = normalize(tangentLightDir + tangentViewDir); // 半向量fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(tangentNormal, halfDir)), _Gloss); // 镜面反射光return fixed4(ambient + diffuse + specular, 1.0);}ENDCG}}FallBack "Specular"}
通过调节 _BumpScale 值在区间 [-2, 2] 之间变化,使得胶囊体呈现动态凹凸变化,效果如下:
3 世界空间中计算光照
NormalMapInWorldSpace.shader
Shader "MyShader/NormalMapInWorldSpace" {Properties {_Color ("Color", Color) = (1, 1, 1, 1) // 贴图颜色_MainTex ("MainTex", 2D) = "white" {} // 主纹理_NormalTex ("NormalTex", 2D) = "bump" {} // 法线纹理_BumpScale ("Bump Scale", Range(-2, 2)) = -2 // 法线纹理凹凸比例_Specular ("Specular", Color) = (1, 1, 1, 1) // 镜面反射颜色_Gloss ("Gloss", Range(8.0, 256)) = 20 // 镜面反射光泽度}SubShader {Pass { Tags { "LightMode"="ForwardBase" }CGPROGRAM#pragma vertex vert#pragma fragment frag#include "Lighting.cginc"fixed4 _Color; // 贴图颜色sampler2D _MainTex; // 主纹理float4 _MainTex_ST; // 主纹理缩放和偏移sampler2D _NormalTex; // 法线纹理float4 _NormalTex_ST; // 法线纹理缩放和偏移float _BumpScale; // 法线纹理凹凸比例fixed4 _Specular; // 镜面反射光颜色float _Gloss; // 镜面反射光泽度struct a2v {float4 vertex : POSITION; // 模型空间顶点坐标float3 normal : NORMAL; // 模型空间法线坐标(仅用于构造世界空间到切线空间的变换矩阵)float4 tangent : TANGENT; // 模型空间切线坐标(仅用于构造世界空间到切线空间的变换矩阵)float2 texcoord : TEXCOORD0; // 纹理坐标};struct v2f {float4 pos : SV_POSITION; // 裁剪空间顶点坐标float4 uv : TEXCOORD0; // xy存储主纹理坐标, zw存储法线纹理坐标float4 T2W0 : TEXCOORD1; // 切线空间到世界空间的变换矩阵的第一行float4 T2W1 : TEXCOORD2; // 切线空间到世界空间的变换矩阵的第二行float4 T2W2 : TEXCOORD3; // 切线空间到世界空间的变换矩阵的第三行};v2f vert(a2v v) {v2f o;o.pos = UnityObjectToClipPos(v.vertex); // 模型空间顶点坐标变换到裁剪空间顶点坐标, 等价于: mul(UNITY_MATRIX_MVP, v.vertex)o.uv.xy = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; // 主纹理缩放和偏移o.uv.zw = v.texcoord.xy * _NormalTex_ST.xy + _NormalTex_ST.zw; // 法线纹理缩放和偏移float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; // 世界空间顶点坐标// 世界空间法线、切线、副切线fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; // 切线空间到世界空间的变换矩阵(为充分利用GPU插值寄存器, 将顶点坐标保存到w维中)o.T2W0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);o.T2W1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);o.T2W2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);return o;}fixed4 frag(v2f i) : SV_Target {float3 worldPos = float3(i.T2W0.w, i.T2W1.w, i.T2W2.w); // 世界空间顶点坐标fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(worldPos)); // 世界空间光线向量fixed3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); // 世界空间观察向量fixed4 packedNormal = tex2D(_NormalTex, i.uv.zw); // 法线纹理采样fixed3 tangentNormal = UnpackNormal(packedNormal); // 切线空间法线向量// 如果法线纹理未被标记为"Normal map", 可以使用以下方式求出法线纹理中片元的法线值//tangentNormal.xy = (packedNormal.xy * 2 - 1) * _BumpScale;//tangentNormal.z = sqrt(1.0 - saturate(dot(tangentNormal.xy, tangentNormal.xy)));tangentNormal.xy *= _BumpScale; // 法线凹凸映射tangentNormal.z = sqrt(1.0 - saturate(dot(tangentNormal.xy, tangentNormal.xy))); // 重新调整法线z值// 世界空间法线坐标fixed3 worldNormal = normalize(half3(dot(i.T2W0.xyz, tangentNormal), dot(i.T2W1.xyz, tangentNormal), dot(i.T2W2.xyz, tangentNormal)));fixed3 albedo = tex2D(_MainTex, i.uv).rgb * _Color.rgb; // 物体自身颜色fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo; // 环境光fixed3 diffuse = _LightColor0.rgb * albedo * max(0, dot(worldNormal, worldLightDir)); // 漫反射光fixed3 halfDir = normalize(worldLightDir + worldViewDir); // 半向量fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(worldNormal, halfDir)), _Gloss); // 镜面反射光return fixed4(ambient + diffuse + specular, 1.0);}ENDCG}}FallBack "Specular"}
运行效果同第 2 节。
声明:本文转自【Unity3D】法线贴图和凹凸映射
关键词:
【Unity3D】法线贴图和凹凸映射 视点
每日讯息!中邮策略:央行降息提振信心 市场有望震荡上行
吃小龙虾戴了手套 为啥还是满手油? 每日快看
天天精选!AMD做了一个201MB缓存的怪物!可惜流产了
今年“6·18”河南消费力全国第八!胡辣汤、洛阳汉服、河南老字号美食全国热卖
k8s 深入篇———— 一些容器操作的原理[三]|报资讯
政治权利名词解释电大 政治权利名词解释 最新资讯
微软确认月初遭DDoS网络攻击:一度导致Microsoft 365服务中断
终末的女武神同人 毗沙门天VS宇智波斑-资讯
249元 雷柏推出VT9S无线鼠标:原相3395引擎、26000 DPI|全球微头条
大四男生实习薪资1万4妈妈仰天大笑 姐姐回应:要在船上写论文 全球聚焦
一箭41星创中国纪录!当天传回超清大图:英格兰一览无余 环球观察
全球热讯:拜耳医药保健有限公司属于哪个国家_拜耳公司是哪个国家
头条焦点:全国大数据与计算智能挑战赛:面向低资源的命名实体识别基线方案,排名13/64
STL vector容器存储键值对
世界滚动:美国加速跌落美债深渊
天天快消息!苹果M2 Ultra首次开盖:Intel 56核心相形见绌
“迈克·马龙,你为什么不买詹姆斯的账?”
环球报道:美团一面:OOM后,JVM一定会退出吗?为什么?
JS(入门)-焦点速读
东土科技:定增募资不超8.75亿元申请获证监会注册批复 环球热文
当前滚动:最便宜折叠手机!moto razr 40开售:3999元起
官方通报“特校校长刘某某强制猥亵残障学生案”
Python调用外部系统命令
【环球报资讯】Python第三方模块:pymongo模块的用法
马斯克:针对智能电视的推特视频应用即将问世 世界快消息
速递!国内首款市域C型动车组亮相:时速达160公里
最新民调:超半数非裔美国人预计美国种族主义会变得更糟 环球报道
500元到5000元 各价位最值得买的10款CPU集合
世界今日报丨独特16:18“方形”比例辨识度拉满:LG推出新款DualUp 28MQ750显示器
演员胡兵50万航司积分被清零引关注 东航客服回应:没办法核实-热门
k8s 深入篇———— docker 镜像是什么[二]
马斯克脑机接口新进展:首例人体植入试验今年开展 环球热资讯
攀升618秒杀:12代酷睿16英寸护眼屏轻薄本仅1999元_全球通讯
天天热资讯!《变形金刚》独占鳌头:2023暑期档票房达15亿元
看了“细菌量” 你还敢给孩子用卷纸来擦嘴吗?_天天快资讯
网飞爆火网剧续作来了!《鱿鱼游戏》第二季官宣:老角色回归|焦点要闻
浦发银行:共湘发展十九载 奋楫扬帆正当时
满血8核+32GB+1TB 机械革命S mini主机到手2929元:办公神器|世界即时看
资讯推荐:上线12年的“QQ安全达人”将下线 网友:你为它装过腾讯电脑管家没?
商职全称是什么 济南商职全称是什么
2023中国高校计算机大数据挑战赛:论文学科分类baseline|清华主办|今日看点
【技术积累】算法中的排序算法【一】
极限科技旗下软件产品 INFINI Easysearch 通过统信 UOS 认证|天天热议
【环球财经】日本为何出现巨额贸易逆差
便宜的瓜不甜?百果园回应女子团购西瓜被嘲讽:是误解 已道歉|全球热闻
京东618发布“35711”梦想:打造3家万亿收入公司 创造100万就业_通讯
演员胡兵向东航维权失败:价值一万多的白金卡50万积分一夜清零
天天快讯:在 Cenntos6.8 下安装 Oracle11g
当前播报:京东限时优惠:Redmi 27英寸4K显示器享大降价
世界头条:人气漫改!网飞真人版《海贼王》预告片出炉:路飞橡胶手无敌
全球车企第一高!马斯克曝特斯拉市值上涨主要动力 今日快看
关注:广州一龙舟队全是富婆?当地:事实 但身价不是参赛门槛
焦点热门:一公司端午节只发了三颗荔枝 员工吐槽:是不是公司要凉了?
女子户外活动后因热射病去世 专家提醒:轻度中暑及时干预_每日时讯
春天的诗有哪些古诗 春天的100首古诗有哪些|快资讯
【热闻】JWT的基本组成结构
当前速递!校长猥亵残障女学生判3年 法院回应全案审查!简直是禽兽不如!
保时捷Taycan对手来了!法拉利“老乡”发布纯电轿跑:124万起-世界报道
世界短讯!上新啦!这些夏日冷饮新品你尝过了吗?今年中国饮品冷饮产业还有这些新趋势!
【技术积累】Java中的集合框架【一】
清除外卖行业“影子店铺”隐患
今天是父亲节 微信上线限时状态感谢老爸:教你2步设置|环球快播
环球信息:重新定义移动办公:华为MatePad Air“野趣办公”成年轻人办公新潮流
每日焦点!16GB显存直戳RTX 4070痛点 AMD RX 7800 XT显卡定了
读发布!设计与部署稳定的分布式系统(第2版)笔记04_集成点
张家界桑植,跳桥救人小哥彭清林的家乡:那里都是“彩色的人”
1799元!前小米9号员工李明发布全球首款Android桌面机器人
Windows游戏一键移植 苹果Mac电脑硬伤不再:暗黑4能跑近百帧 当前热闻
李想造车:网上全赢过 现实没输过 焦点资讯
今日观点!女子骑车手扶帽子头部着地身亡:戴头盔太重要 新国标下月施行
天天观热点:吸甲醛最快最有效方法不花钱(吸甲醛最好的方法是什么)
理想自研自动充电机器人亮相:自动插枪 车主全程免下车_实时焦点
观焦点:广汽本田首批ZR-V致在e:HEV出口欧洲
rust 使用第三方库构建mini命令行工具
spring-boot 项目 使用总结
淄博狂飙90天:烧烤降温流量下滑 大部分烧烤店不再需要排队|当前速看
跳河救人小哥说大家给我的太多了:我只是做了一件小事
95后小伙卖临期食品走红:极具性价比 也能防止浪费_天天视讯
余承东:除了华为和比亚迪 其他人活下来很难
焦点热议:小孩路边偷偷买猫 家长找商家退猫遭拒把猫摔死:网友看怒
83届奥斯卡获奖名单(关于83届奥斯卡获奖名单的基本详情介绍)-全球速递
Rachio3控制用水量的智能庭院洒水器_全球最资讯
【全球新视野】Linux批量文件操作——基于find-xargs
安全攻击溯源-钓鱼邮件溯源 环球滚动
天天百事通!保时捷Mission_E原型车在纽伯格林上飞奔
一加Ace 2V大促:12+256不到2000元 无塑料支架 前沿资讯
大雾致航班取消 乘客骂哭机场员工
焦点速看:江苏常州:把惠企的公交车开到企业“家门口”
环球动态:08. centos安装包方式安装nginx(推荐该方式)
nas docker安装mysql 整理
麻省理工学院开发出超吸水性水凝胶 具有巨大的应用潜力
为计划支持平稳过渡 谷歌千万域名将全部打包出售
网友将梅西亲笔签名纹在了手臂上 网友点评称将永远擦不掉
国产开放世界端游《仙剑世界》即将开启首测 研发时间超过两年
极兔速递正式向港交所提交上市申请书 2022年包裹量计为东南亚排名第一
山东一高校为毕业生举行别有滋味的龙虾宴 引发网友羡慕嫉妒
2023端午档期预售票房突破1000万 王宝强新作《八角笼中》备受期待
医生发现一男子是正常人骨密度的8倍 车祸后毫发无损
媒体曝光C罗与乔治娜曾达成“婚前协议” 若分手女友每个月可获10万欧元补贴