主頁 >  其他 > 【Unity Shader學習筆記】Unity光照-陰影

【Unity Shader學習筆記】Unity光照-陰影

2022-07-19 07:55:20 其他

1、原理

1.1、概述

由一個物體向其他物體投射陰影,以及一個物體如何接收其他物體的陰影,

實時渲染中經常使用 Shadow Map 技術,它會首先把攝像機的位置放在與光源重合的位置上, 那么場景中該光源的陰影區域就是那些攝像機看不到的地方,Unity 就是使用的這種技術,

在前向渣染路徑中, 如果場景中最重要的平行光開啟了陰影, Unity 就會為該光源計算它的陰影映射紋理( shadow map), 這張陰影映射紋理本質上也是一張深度圖, 它記錄了從該光源的位置出發、 能看到的場景中距離它最近的表面的深度資訊,

1.2、ShadowCaster Pass

Unity 選擇使用一個額外的 Pass 來專門更新光源的陰影映射紋理, 這個 Pass 就是 LightMode 標簽被設
置為 ShadowCaster 的 Pass,

這個 Pass 的渲染目標為深度紋理,

Unity 首先把攝像機放置到光源的位置上, 然后呼叫該 Pass, 通過對頂點變換后得到光源空間下的位置, 并據此來輸出深度資訊到陰影映射紋理中,

1.3、Screenspace Shadow Map

正常情況下,我們在渲染陰影時,會將每個頂點位置變換到光源空間下, 然后使用 xy 分量對陰影映射紋理進行采樣,得到陰影映射紋理中該位置的深度資訊, 如果該深度值小于該頂點的深度值( z 分量),那么說明該點位于陰影中,

Unity 提出了一種新的采樣技術:螢屏空間的陰影映射技術(Screenspace Shadow Map),

這項技術原本時延遲渲染中產生陰影的一種方法,應用這項技術要求顯卡支持 MRT ,

Unity 首先會通過呼叫 LightMode 為 ShadowCaster 的 Pass 來得到可投射陰影的光源的陰影映射紋理以及攝像機的深度紋理,

然后, 根據光源的陰影映射紋理和攝像機的深度紋理來得到螢屏空間的陰影圖, 如果攝像機的深度圖中記錄的表面深度大于轉換到陰影映射紋理中的深度值, 就說明該表面雖然是可見的, 但是卻處于該光源的陰影中

如果我們想要一個物體接收來自其他物體的陰影, 只需要在 Shader 中把表面坐標從模型空間變換到螢屏空間, 然后使用這個坐標對陰影圖進行采樣即可,

1.4、總結

一個物體接收來自其他物體的陰影, 以及它向其他物體投射陰影是兩個程序,

  • 如果我們想要一個物體接收來自其他物體的陰影, 就必須:
    • 在 Shader 中對陰影映射紋理( 包括螢屏空間的陰影圖) 進行采樣, 把采樣結果和最后的光照結果相乘來產生陰影效果,
    • 再打開模型的 Mesh Render 組件的 Receive Shadows 屬性,
  • 如果我們想要一個物體向其他物體投射陰影, 就必須:
    • 在 Shader 中添加標簽為 ShadowCaster 的 Pass ,
    • 更改模型的 Mesh Render 組件的 Cast Shadows 屬性,

如果使用了螢屏空間的投影映射技術, Unity 還會使用這個 Pass 產生一張攝像機的深度紋理,

如果沒有手動添加標簽為 ShadowCaster 的 Pass ,Unity 可能會在 Fallback 中找到合適的 Pass ,

2、不透明物體的陰影

2.1、向物體投射陰影

可以直接利用 FallBack 中的代碼實作投射陰影,

2.2、讓物體接收陰影

2.2.1、計算程序

使用宏來計算陰影,使用 Base Pass 計算陰影,

  • 添加#include "AutoLight.cginc"
  • 在 v2f 中添加SHADOW_COORDS(2)
  • 頂點著色器中添加TRANSFER_SHADOW(o);
  • 片元著色器中添加fixed shadow = SHADOW_ATTENUATION(i);
  • 片元著色器的輸出修改為:
    return fixed4(ambient + (diffuse + specular) * atten * shadow, 1.0);

2.2.2、解釋

在前向渲染中, 宏 SHADOW_COORDS 實際就是宣告了一個名為 _ShadowCoord 的陰影紋理坐標變數,

TRANSFER_SHADOW 的實作會根據平臺不同而有所差異,

  • 如果當前平臺可以使用螢屏空間的陰影映射技術(判斷是否定義了 UNITY_NO_SCREENSPACE_SHADOWS 來得到),TRANSFER_SHADOW 會呼叫內置的 ComputeScreenPos 函式來計算 _ShadowCoord;
  • 如果該平臺不支持螢屏空間的陰影映射技術, 就會使用傳統的陰影映射技術,

TRANSFER_SHADOW 會把頂點坐標從模型空間變換到光源空間后存盤到 _ShadowCoord 中,

SHADOW_ATTENUATION 負責使用 _ShadowCoord 中的紋理進行采樣,得到陰影資訊,

由于這些宏中會使用背景關系變數來進行相關計算, 例如 TRANSFER_SHADOW 會使用 v.vertex 或 a.pos 來計算坐標, 因此為了能夠讓這些宏正確作業, 我們需要保證自定義的變數名和這些宏中使用的變數名相匹配,

我們需要保證: a2f 結構體中的頂點坐標變數名必須是 vertex , 頂點著色器的輸出結構體 v2f 必須命名為 v, 且 v2f 中的頂點位置變數必須命名為 pos ,

2.3、代碼

Shader "Unity Shaders Book/Chapter 9/Shadow" {
	Properties {
		_Diffuse ("Diffuse", Color) = (1, 1, 1, 1)
		_Specular ("Specular", Color) = (1, 1, 1, 1)
		_Gloss ("Gloss", Range(8.0, 256)) = 20
	}
	SubShader {
		Tags { "RenderType"="Opaque" }
		
		Pass {
			// Pass for ambient light & first pixel light (directional light)
			Tags { "LightMode"="ForwardBase" }
		
			CGPROGRAM
			
			// Apparently need to add this declaration 
			#pragma multi_compile_fwdbase	
			
			#pragma vertex vert
			#pragma fragment frag
			
			#include "Lighting.cginc"
			#include "AutoLight.cginc"
			
			fixed4 _Diffuse;
			fixed4 _Specular;
			float _Gloss;
			
			struct a2v {
				float4 vertex : POSITION;
				float3 normal : NORMAL;
			};
			
			struct v2f {
				float4 pos : SV_POSITION;
				float3 worldNormal : TEXCOORD0;
				float3 worldPos : TEXCOORD1;
				SHADOW_COORDS(2)
			};
			
			v2f vert(a2v v) {
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
				
				o.worldNormal = UnityObjectToWorldNormal(v.normal);
				
				o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;

				TRANSFER_SHADOW(o);
				
				return o;
			}
			
			fixed4 frag(v2f i) : SV_Target {
				fixed3 worldNormal = normalize(i.worldNormal);
				fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);
				
				fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
				
			 	fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * max(0, dot(worldNormal, worldLightDir));

			 	fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);
			 	fixed3 halfDir = normalize(worldLightDir + viewDir);
			 	fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(worldNormal, halfDir)), _Gloss);

				fixed atten = 1.0;//光照衰減

				fixed shadow = SHADOW_ATTENUATION(i);
				
				return fixed4(ambient + (diffuse + specular) * atten * shadow, 1.0);
			}
			
			ENDCG
		}
	
		Pass {
			// Pass for other pixel lights
			Tags { "LightMode"="ForwardAdd" }
			
			Blend One One
		
			CGPROGRAM
			
			// Apparently need to add this declaration
			#pragma multi_compile_fwdadd
			
			#pragma vertex vert
			#pragma fragment frag
			
			#include "Lighting.cginc"
			#include "AutoLight.cginc"
			
			fixed4 _Diffuse;
			fixed4 _Specular;
			float _Gloss;
			
			struct a2v {
				float4 vertex : POSITION;
				float3 normal : NORMAL;
			};
			
			struct v2f {
				float4 pos : SV_POSITION;
				float3 worldNormal : TEXCOORD0;
				float3 worldPos : TEXCOORD1;
			};
			
			v2f vert(a2v v) {
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);
				
				o.worldNormal = UnityObjectToWorldNormal(v.normal);
				
				o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
				
				return o;
			}
			
			fixed4 frag(v2f i) : SV_Target {
				fixed3 worldNormal = normalize(i.worldNormal);

				//判斷是否是平行光,獲得世界坐標下光線方向
				#ifdef USING_DIRECTIONAL_LIGHT
					fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);
				#else
					fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz - i.worldPos.xyz);
				#endif
				
				fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * max(0, dot(worldNormal, worldLightDir));
				
				fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);
				fixed3 halfDir = normalize(worldLightDir + viewDir);
				fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(worldNormal, halfDir)), _Gloss);
				
				//判斷是否是平行光,處理衰減
				#ifdef USING_DIRECTIONAL_LIGHT
					fixed atten = 1.0;
				#else
					#if defined (POINT)
				        float3 lightCoord = mul(unity_WorldToLight, float4(i.worldPos, 1)).xyz;
				        fixed atten = tex2D(_LightTexture0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL;
				    #elif defined (SPOT)
				        float4 lightCoord = mul(unity_WorldToLight, float4(i.worldPos, 1));
				        fixed atten = (lightCoord.z > 0) * tex2D(_LightTexture0, lightCoord.xy / lightCoord.w + 0.5).w * tex2D(_LightTextureB0, dot(lightCoord, lightCoord).rr).UNITY_ATTEN_CHANNEL;
				    #else
				        fixed atten = 1.0;
				    #endif
				#endif

				return fixed4((diffuse + specular) * atten, 1.0);
			}
			
			ENDCG
		}
	}
	FallBack "Specular"
}

3、統一管理光照衰減與陰影

使用內置宏UNITY_LIGHT_ATTENUATION,實作同時計算光照衰減因子與陰影,

在上述代碼的基礎上,修改片元著色器,

fixed4 frag(v2f i) : SV_Target {  
    fixed3 worldNormal = normalize(i.worldNormal);  
    fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);  
      
    fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;  
      
    fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * max(0, dot(worldNormal, worldLightDir));  
  
    fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz);  
    fixed3 halfDir = normalize(worldLightDir + viewDir);  
    fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(0, dot(worldNormal, halfDir)), _Gloss);  
  
    //使用宏UNITY_LIGHT_ATTENUATION  
    UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos);  
      
    return fixed4(ambient + (diffuse + specular) * atten, 1.0);  
} 

UNITY_LIGHT_ATTENUATION會幫助我們宣告 atten 變數,

該宏輸入三個變數:輸出引數名、結構體 v2f 、世界空間坐標,

該宏使用結構體 v2f ,呼叫 14.4 中的 SHADOW_ATTENUATION 宏實作陰影計算,

該宏使用世界空間下的坐標,計算光源空間下的坐標,并對衰減紋理采樣得到光照衰減,

如果我們希望可以在 Additional Pass 中添加陰影效果,
使用 #pragma multi_compile_fwdadd_fullshadows 指令
代替 Additional Pass 中的 #pragma multi_compile_fwdadd 指令,
這樣一來, Unity 也會為這些額外的逐像素光源計算陰影, 并傳遞給 Shader,

4、透明度測驗-陰影

FallBack 使用FallBack "Transparent/Cutout/VertexLit"即可讓鏤空的部分不投射陰影,

Shader "Unity Shaders Book/Chapter 9/AlphaTestWithShadow"
{
    Properties
    {
        _Color ("Main Tint", Color) = (1,1,1,1)
        _MainTex("Main Tex", 2D) = "white" {}
        _Cutoff("Alpha CutOff", Range(0, 1)) = 0.5//透明度測驗的判斷條件
        
    }
    SubShader
    {
        Tags{"Queue" = "AlphaTest" "IgnoreProjector"="True" "RenderType" = "TransparentCutout"}

        Pass{
            Tags { "LightMode"="ForwardBase" }

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "Lighting.cginc"
            #include "AutoLight.cginc"
            //屬性
            fixed4 _Color;
            sampler2D _MainTex;
            float4 _MainTex_ST;//紋理縮放
            fixed _Cutoff;
            //輸入輸出結構體
            struct a2v{
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                float4 texcoord : TEXCOORD0;
            };

            struct v2f {
                float4 pos : POSITION;
                float3 worldNormal : TEXCOORD0;
                float3 worldPos : TEXCOORD1;
                float2 uv : TEXCOORD2;
                //我們已經占用了三個插值暫存器,因此將其存盤在TEXCOORD3上
                SHADOW_COORDS(3)
            };

            v2f vert (a2v v){
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);

                o.worldNormal = UnityObjectToWorldNormal(v.normal);
                o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;

                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);

                TRANSFER_SHADOW(o);

                return o;
            }

            fixed4 frag(v2f i) : SV_Target {
                fixed3 worldNormal = normalize(i.worldNormal);
                fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));

                fixed4 texColor = tex2D(_MainTex, i.uv);

                //Alpha Test
                clip(texColor.a - _Cutoff);

                fixed3 albedo = texColor.rgb * _Color.rgb;

                fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz * albedo;

                fixed3 diffuse = _LightColor0.rgb * albedo * max(0, dot(worldNormal, worldLightDir));

                UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos);

                return fixed4(ambient + diffuse * atten, 1.0);
            }
            ENDCG
        }
    }
    FallBack "Transparent/Cutout/VertexLit"
}

5、透明度混合-陰影

生成透明度混合物體的陰影,需要在每個光源空間下仍然嚴格按照從后往前的順序進行渲染,

這會非常消耗性能,因此 Unity 所有內置的透明度混合的檔案都沒有包含陰影投射的 Pass,

如果一定需要陰影,可以將其當作不透明物體來設定有 ShadowCaster 標簽的 Pass ,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/499650.html

標籤:其他

上一篇:選擇排序/插入排序/冒泡排序

下一篇:【Unity Shader學習筆記】Unity高級紋理 - 立方體紋理

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more