色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Unity線框Shader插件開(kāi)發(fā):基于重心坐標(biāo)的高性能渲染方案

Unity線框Shader插件開(kāi)發(fā):基于重心坐標(biāo)的高性能渲染方案 1. 項(xiàng)目概述為什么我們需要一個(gè)專門的線框Shader插件在Unity里做3D項(xiàng)目尤其是涉及到技術(shù)美術(shù)、原型設(shè)計(jì)或者需要突出模型結(jié)構(gòu)的時(shí)候線框渲染W(wǎng)ireframe Rendering是個(gè)繞不開(kāi)的需求。你可能第一時(shí)間想到的是在編輯器的Scene視圖里看到的那個(gè)線框模式或者用OnRenderObject配合GL庫(kù)手動(dòng)畫線。但前者只能在編輯器里看后者性能開(kāi)銷大且效果單一很難應(yīng)用到最終的產(chǎn)品渲染中比如你想做一個(gè)賽博朋克風(fēng)格的數(shù)據(jù)可視化或者一個(gè)建筑結(jié)構(gòu)的剖切展示又或者是一個(gè)炫酷的技能特效需要模型以線框形式高亮顯示。這就是“Unity線框Shader插件”要解決的問(wèn)題。它不是一個(gè)簡(jiǎn)單的功能而是一套完整的、基于Shader的渲染解決方案。市面上雖然有一些現(xiàn)成的方案比如用幾何著色器Geometry Shader生成網(wǎng)格邊線或者用屏幕后處理Post-processing提取深度和法線信息來(lái)描邊但它們各有各的“坑”。幾何著色器在移動(dòng)端支持有限性能是個(gè)大問(wèn)題屏幕后處理的方法無(wú)法區(qū)分單個(gè)模型的內(nèi)部結(jié)構(gòu)容易把一堆重疊的模型線框混在一起而且對(duì)透明物體的處理也很棘手。所以一個(gè)成熟的線框Shader插件其核心價(jià)值在于它提供了一種穩(wěn)定、高效、可定制且與Unity渲染管線深度集成的方式來(lái)為你的3D模型賦予高質(zhì)量的線框外觀并且這個(gè)外觀是作為材質(zhì)的一部分可以像普通材質(zhì)一樣被光照、后期特效影響甚至實(shí)現(xiàn)動(dòng)畫效果。它把我們從“能不能實(shí)現(xiàn)”的層面提升到了“如何實(shí)現(xiàn)得更漂亮、更高效”的層面。無(wú)論是用于游戲內(nèi)的特殊視覺(jué)表現(xiàn)還是用于工業(yè)設(shè)計(jì)、建筑可視化的應(yīng)用開(kāi)發(fā)都是一個(gè)提升產(chǎn)品專業(yè)度和視覺(jué)沖擊力的利器。接下來(lái)我將從一個(gè)實(shí)際開(kāi)發(fā)者的角度拆解這樣一個(gè)插件從設(shè)計(jì)思路到具體實(shí)現(xiàn)的全過(guò)程并分享其中積累的實(shí)戰(zhàn)經(jīng)驗(yàn)和避坑指南。2. 核心渲染方案選型與原理深度剖析實(shí)現(xiàn)線框渲染技術(shù)路線不止一條。選型直接決定了插件的性能上限、兼容性和最終效果。我們需要在效果、性能和通用性之間找到最佳平衡點(diǎn)。2.1 主流技術(shù)路線對(duì)比目前在Shader中實(shí)現(xiàn)線框效果主要有以下三種主流思路每種都有其鮮明的優(yōu)缺點(diǎn)方案一基于幾何著色器Geometry Shader生成這是最“正統(tǒng)”的學(xué)術(shù)思路。在頂點(diǎn)著色器之后幾何著色器接收一個(gè)圖元比如三角形然后你可以在這個(gè)階段根據(jù)三角形的三個(gè)頂點(diǎn)生成三條代表邊線的新的圖元比如細(xì)長(zhǎng)的四邊形或線列表。優(yōu)點(diǎn)概念清晰生成的線框是真實(shí)的幾何體寬度穩(wěn)定不會(huì)因?yàn)橥敢曌冃尾⑶铱梢暂p松實(shí)現(xiàn)等寬線World-space或View-space寬度。缺點(diǎn)致命傷在于性能與兼容性。幾何著色器會(huì)顯著增加GPU的負(fù)載尤其是在面數(shù)多的模型上。更關(guān)鍵的是在OpenGL ES 3.0即大多數(shù)移動(dòng)設(shè)備上幾何著色器的支持非常有限且行為不一致在MetaliOS/macOS上也有額外限制。這對(duì)于追求跨平臺(tái)的Unity項(xiàng)目來(lái)說(shuō)是巨大的風(fēng)險(xiǎn)。方案二基于屏幕空間后處理Screen-space Post-processing這種方案不修改原始模型而是在所有物體渲染完畢后對(duì)整個(gè)屏幕圖像進(jìn)行處理。通常利用深度緩沖Depth Buffer和法線緩沖Normal Buffer來(lái)檢測(cè)像素之間的突變邊緣從而勾勒出輪廓。優(yōu)點(diǎn)實(shí)現(xiàn)一次全場(chǎng)生效。不關(guān)心場(chǎng)景中有多少物體計(jì)算開(kāi)銷相對(duì)固定。缺點(diǎn)這是“輪廓線”而非“線框”。它無(wú)法繪制出模型內(nèi)部的三角面邊線只能畫出物體與物體之間、或物體自身深度/法線不連續(xù)的邊界。對(duì)于想展示網(wǎng)格拓?fù)浣Y(jié)構(gòu)的需求完全無(wú)法滿足。此外對(duì)透明物體的處理也非常復(fù)雜。方案三基于片段著色器Fragment Shader的Barycentric Coordinates重心坐標(biāo)方法這是目前綜合來(lái)看最優(yōu)秀、應(yīng)用最廣的方案也是我們插件將采用的核心方案。它的原理巧妙而高效在頂點(diǎn)著色器中我們?yōu)槿切蔚娜齻€(gè)頂點(diǎn)分別賦予一個(gè)固定的重心坐標(biāo)值(1,0,0), (0,1,0), (0,0,1)。這些值會(huì)在三角形內(nèi)部進(jìn)行插值傳遞到片段著色器。對(duì)于三角形內(nèi)的任意一點(diǎn)其插值后的三個(gè)重心坐標(biāo)分量之和恒為1。在片段著色器中我們檢查當(dāng)前片段的重心坐標(biāo)值。如果一個(gè)分量非常小例如小于某個(gè)閾值_WireWidth就說(shuō)明這個(gè)片段非??拷切蔚囊粭l邊。我們將這些靠近邊的像素渲染為線框顏色內(nèi)部的像素則渲染為模型原本的表面顏色或透明。優(yōu)點(diǎn)高性能無(wú)需幾何著色器僅依靠標(biāo)準(zhǔn)的頂點(diǎn)/片段著色器管線移動(dòng)端兼容性極佳。真線框能準(zhǔn)確繪制出每一個(gè)三角面的邊線完美展示網(wǎng)格結(jié)構(gòu)。靈活可控線寬、顏色、抗鋸齒都可以在片段著色器中通過(guò)數(shù)學(xué)計(jì)算精細(xì)控制。易于融合可以很容易地與原有的表面著色如PBR光照結(jié)合實(shí)現(xiàn)“著色線框”的混合效果。缺點(diǎn)線寬在屏幕空間Screen-space是均勻的但在透視投影下遠(yuǎn)處的線會(huì)看起來(lái)更粗因?yàn)橥瑯訉挾鹊南袼馗采w了更大的世界空間范圍。如果需要世界空間等寬線需要更復(fù)雜的計(jì)算。當(dāng)三角形非常大時(shí)靠近三角形中心的區(qū)域重心坐標(biāo)分量都遠(yuǎn)離0線框效果正常但當(dāng)三角形非常小時(shí)可能整個(gè)三角形都被判定為“靠近邊”導(dǎo)致小三角形被完全填實(shí)。這需要通過(guò)_WireWidth閾值或動(dòng)態(tài)調(diào)整來(lái)緩解。綜合比較基于重心坐標(biāo)的片段著色器方案在效果、性能和兼容性上取得了最佳平衡是我們插件實(shí)現(xiàn)高級(jí)線框渲染的基石。2.2 我們的插件方案設(shè)計(jì)我們的插件將圍繞“重心坐標(biāo)法”構(gòu)建但不止于此。一個(gè)高級(jí)的插件需要提供豐富的特性來(lái)應(yīng)對(duì)不同場(chǎng)景雙Pass渲染架構(gòu)這是實(shí)現(xiàn)高質(zhì)量混合效果的關(guān)鍵。第一個(gè)PassPass “Geometry”正常渲染模型的實(shí)體表面支持標(biāo)準(zhǔn)PBR、Unlit等。第二個(gè)PassPass “Wireframe”專門用于渲染線框并且將其混合到第一個(gè)Pass的結(jié)果上。第二個(gè)Pass的深度測(cè)試ZTest通常設(shè)置為L(zhǎng)Equal但深度寫入ZWrite設(shè)置為Off避免線框干擾實(shí)體模型的深度關(guān)系?;旌夏J紹lend常用SrcAlpha OneMinusSrcAlpha來(lái)實(shí)現(xiàn)透明疊加。可配置的線框?qū)傩酝ㄟ^(guò)材質(zhì)面板暴露一系列參數(shù)讓美術(shù)和開(kāi)發(fā)者可以自由調(diào)整_WireColor線框顏色。_WireWidth線寬本質(zhì)是重心坐標(biāo)的閾值。_BaseColor/_MainTex模型表面顏色和紋理。_Smoothness、_Metallic如果集成了PBR這些標(biāo)準(zhǔn)參數(shù)也需要。_EnableDepthFade一個(gè)關(guān)鍵選項(xiàng)。啟用后會(huì)根據(jù)像素的深度值對(duì)線框進(jìn)行淡出可以有效緩解遠(yuǎn)處線框過(guò)粗或視覺(jué)混亂的問(wèn)題提升場(chǎng)景深度感。抗鋸齒Anti-aliasing支持純色線框在屏幕上會(huì)有明顯的鋸齒。我們會(huì)在片段著色器中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的軟邊Soft Edge效果。不是簡(jiǎn)單地用閾值_WireWidth做一個(gè)“非黑即白”的判斷而是計(jì)算一個(gè)從邊到內(nèi)部的平滑過(guò)渡因子比如smoothstep函數(shù)用這個(gè)因子來(lái)混合線框色和表面色這樣線框的邊緣就會(huì)有漸變的透明度從而在視覺(jué)上平滑鋸齒。多渲染管線兼容性設(shè)計(jì)Unity有Built-in、URPUniversal Render Pipeline、HDRPHigh Definition Render Pipeline三大管線。它們的Shader語(yǔ)法和庫(kù)函數(shù)略有不同。一個(gè)成熟的插件需要為至少Built-in和URP提供對(duì)應(yīng)的Shader變體。HDRP由于復(fù)雜度高可以作為高級(jí)版本提供。我們將以Built-in管線為主要示例進(jìn)行講解并指出在URP中需要調(diào)整的關(guān)鍵點(diǎn)。3. Shader核心代碼實(shí)現(xiàn)與逐行解析理論說(shuō)得再多不如一行代碼來(lái)得實(shí)在。下面我們將構(gòu)建一個(gè)基于Built-in管線的、支持表面著色和線框混合的雙Pass Shader。我會(huì)對(duì)關(guān)鍵部分進(jìn)行詳細(xì)注釋。3.1 屬性定義與變量聲明首先在Shader的Properties塊中定義所有可供材質(zhì)面板調(diào)節(jié)的參數(shù)。Shader Custom/WireframeAdvanced { Properties { // 表面顏色與紋理 _BaseColor (Base Color, Color) (0.5, 0.5, 0.5, 1) _MainTex (Base (RGB), 2D) white {} // PBR相關(guān)參數(shù)簡(jiǎn)化版 _Metallic (Metallic, Range(0,1)) 0.0 _Glossiness (Smoothness, Range(0,1)) 0.5 // 線框參數(shù) _WireColor (Wire Color, Color) (0, 1, 1, 1) // 默認(rèn)青色 _WireWidth (Wire Width, Range(0.001, 0.5)) 0.05 // 線寬控制靈敏度 _WireSmoothness (Wire Smoothness, Range(0.0001, 0.2)) 0.005 // 抗鋸齒平滑度 // 深度淡出 [Toggle(ENABLE_DEPTH_FADE)] _EnableDepthFade (Enable Depth Fade, Float) 1 _DepthFadeStart (Fade Start, Float) 5 _DepthFadeEnd (Fade End, Float) 50 }注意_WireWidth的值很小因?yàn)樗皇钦嬲南袼貙挾榷侵匦淖鴺?biāo)的閾值。0.05意味著重心坐標(biāo)任一分量小于0.05時(shí)就被認(rèn)為是“靠近邊”。3.2 頂點(diǎn)著色器傳遞重心坐標(biāo)我們需要修改頂點(diǎn)輸入結(jié)構(gòu)并計(jì)算重心坐標(biāo)。這里用一個(gè)巧妙的技巧利用TEXCOORD1或自定義語(yǔ)義來(lái)傳遞重心坐標(biāo)。// 定義頂點(diǎn)輸入結(jié)構(gòu) struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; float2 uv : TEXCOORD0; // 我們將使用TEXCOORD1來(lái)傳遞每個(gè)頂點(diǎn)的重心坐標(biāo)“種子” // 這個(gè)值在建模時(shí)或通過(guò)腳本預(yù)先設(shè)置好每個(gè)三角形的三個(gè)頂點(diǎn)分別是(1,0,0), (0,1,0), (0,0,1) float3 barycentric : TEXCOORD1; }; // 定義從頂點(diǎn)著色器到片段著色器的結(jié)構(gòu)體v2f struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; float3 worldNormal : TEXCOORD1; float4 worldPos : TEXCOORD2; // 關(guān)鍵將重心坐標(biāo)傳遞給片段著色器它會(huì)自動(dòng)在三角形內(nèi)插值 float3 barycentric : TEXCOORD3; // 用于深度淡出的裁剪空間坐標(biāo) float4 screenPos : TEXCOORD4; }; v2f vert (appdata v) { v2f o; o.pos UnityObjectToClipPos(v.vertex); // 標(biāo)準(zhǔn)頂點(diǎn)變換 o.uv v.uv; o.worldNormal UnityObjectToWorldNormal(v.normal); o.worldPos mul(unity_ObjectToWorld, v.vertex); o.barycentric v.barycentric; // 直接傳遞無(wú)需計(jì)算 o.screenPos ComputeScreenPos(o.pos); // 計(jì)算用于屏幕空間效果的坐標(biāo) return o; }這里有一個(gè)至關(guān)重要的前置步驟appdata中的barycentric坐標(biāo)從哪里來(lái)在3D建模軟件中我們可以將頂點(diǎn)顏色Vertex Color的三個(gè)通道R,G,B分別設(shè)置為(1,0,0)等值。然后在Unity中通過(guò)腳本在導(dǎo)入模型或運(yùn)行時(shí)將頂點(diǎn)顏色數(shù)據(jù)讀取并填充到網(wǎng)格的uv2或tangent等通道中再在Shader中通過(guò)TEXCOORD1讀取。這是插件需要提供的配套工具腳本的核心功能之一。3.3 片段著色器計(jì)算線框與表面混合這是Shader的精華所在。我們首先計(jì)算表面顏色模擬簡(jiǎn)單光照然后計(jì)算線框因子最后混合。// 簡(jiǎn)單的Blinn-Phong光照計(jì)算函數(shù)用于示例實(shí)際可用更復(fù)雜的PBR模型 float3 CalculateSurfaceColor (v2f i) { float3 worldNormal normalize(i.worldNormal); float3 worldLightDir normalize(_WorldSpaceLightPos0.xyz); float3 viewDir normalize(_WorldSpaceCameraPos.xyz - i.worldPos.xyz); // 漫反射 float NdotL max(0, dot(worldNormal, worldLightDir)); float3 diffuse _LightColor0.rgb * NdotL * tex2D(_MainTex, i.uv).rgb * _BaseColor.rgb; // 鏡面反射簡(jiǎn)化 float3 halfDir normalize(worldLightDir viewDir); float NdotH max(0, dot(worldNormal, halfDir)); float specular pow(NdotH, _Glossiness * 128) * _Metallic; float3 spec _LightColor0.rgb * specular; return diffuse spec; } // 計(jì)算線框因子 float WireframeFactor (float3 barycentric, float width, float smoothness) { // 計(jì)算當(dāng)前片段到三條邊的最短“距離”即三個(gè)重心坐標(biāo)分量中最小的那個(gè) float3 dist barycentric; float minDist min(min(dist.x, dist.y), dist.z); // 使用smoothstep實(shí)現(xiàn)抗鋸齒的軟邊線框 // 當(dāng)minDist小于width時(shí)線框因子為1完全線框色 // 當(dāng)minDist大于(width smoothness)時(shí)線框因子為0完全表面色 // 在中間區(qū)間平滑過(guò)渡 float factor 1.0 - smoothstep(width, width smoothness, minDist); return factor; } // 深度淡出函數(shù) float DepthFadeFactor (v2f i, float start, float end) { // 將裁剪空間坐標(biāo)的w分量轉(zhuǎn)換為線性深度近似 float rawDepth i.screenPos.w; // 或者使用 LinearEyeDepth 更精確 // 計(jì)算基于深度的淡出因子0到1之間 float fade saturate((rawDepth - start) / (end - start)); // 返回一個(gè)從1近處到0遠(yuǎn)處的因子用于乘在線框強(qiáng)度上 return 1.0 - fade; } fixed4 frag (v2f i) : SV_Target { // 1. 計(jì)算表面顏色 float3 surfaceColor CalculateSurfaceColor(i); // 2. 計(jì)算線框因子 float wireFactor WireframeFactor(i.barycentric, _WireWidth, _WireSmoothness); // 3. 應(yīng)用深度淡出如果啟用 #ifdef ENABLE_DEPTH_FADE float depthFade DepthFadeFactor(i, _DepthFadeStart, _DepthFadeEnd); wireFactor * depthFade; #endif // 4. 混合表面色和線框色 float3 finalColor lerp(surfaceColor, _WireColor.rgb, wireFactor * _WireColor.a); // 最終顏色的Alpha通道可以簡(jiǎn)單處理例如使用表面Alpha或與線框因子混合 float finalAlpha 1.0; // 根據(jù)需求調(diào)整 return fixed4(finalColor, finalAlpha); }3.4 完整的Shader雙Pass結(jié)構(gòu)最后我們將上述代碼組織到兩個(gè)Pass中。SubShader { Tags { RenderTypeOpaque QueueGeometry} // Pass 1: 渲染幾何表面 Pass { Name GEOMETRY Tags { LightModeForwardBase } CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fwdbase // 編譯深度淡出變體 #pragma multi_compile __ ENABLE_DEPTH_FADE // ... 包含上面所有的屬性和結(jié)構(gòu)體定義 ... // ... 包含上面所有的函數(shù)定義 ... // 這個(gè)Pass的frag函數(shù)只返回表面顏色不混合線框 fixed4 frag_geometry (v2f i) : SV_Target { return fixed4(CalculateSurfaceColor(i), 1.0); } ENDCG } // Pass 2: 渲染線框疊加在Pass1之上 Pass { Name WIREFRAME Tags { LightModeForwardBase } Blend SrcAlpha OneMinusSrcAlpha // 啟用Alpha混合 ZWrite Off // 關(guān)閉深度寫入防止線框遮擋自身 ZTest LEqual // 深度測(cè)試仍然需要確保線框只在可見(jiàn)表面繪制 Cull Off // 關(guān)閉裁剪確保背面也能看到線框可選 CGPROGRAM #pragma vertex vert #pragma fragment frag_wire #pragma multi_compile_fwdbase #pragma multi_compile __ ENABLE_DEPTH_FADE // 使用同一個(gè)vert函數(shù) // 這個(gè)Pass的frag函數(shù)只計(jì)算和輸出線框 fixed4 frag_wire (v2f i) : SV_Target { float wireFactor WireframeFactor(i.barycentric, _WireWidth, _WireSmoothness); #ifdef ENABLE_DEPTH_FADE wireFactor * DepthFadeFactor(i, _DepthFadeStart, _DepthFadeEnd); #endif // 線框Pass直接輸出線框顏色Alpha由wireFactor控制 return fixed4(_WireColor.rgb, wireFactor * _WireColor.a); } ENDCG } }為什么用兩個(gè)Pass第一個(gè)Pass確保模型實(shí)體表面正確寫入深度緩沖和顏色緩沖參與全局光照和陰影計(jì)算。第二個(gè)Pass利用已有的深度信息只在線框部分進(jìn)行透明的顏色疊加。這種方式比在單個(gè)Pass里做復(fù)雜的混合更清晰、更可控也更容易與Unity的渲染管線其他功能如動(dòng)態(tài)批處理兼容。4. 插件化工程實(shí)現(xiàn)與性能優(yōu)化一個(gè)可用的Shader只是開(kāi)始。要成為一個(gè)真正的“插件”我們需要提供開(kāi)箱即用的完整體驗(yàn)這包括編輯器工具、性能優(yōu)化和跨管線支持。4.1 編輯器工具腳本自動(dòng)生成重心坐標(biāo)手動(dòng)為每個(gè)模型的頂點(diǎn)設(shè)置重心坐標(biāo)是不現(xiàn)實(shí)的。我們需要一個(gè)編輯器腳本在導(dǎo)入模型時(shí)或通過(guò)菜單命令自動(dòng)處理。using UnityEngine; using UnityEditor; using System.Collections.Generic; public class WireframeUtility : MonoBehaviour { [MenuItem(Tools/Wireframe/Generate Barycentric for Selected Mesh)] static void GenerateBarycentricForSelected() { GameObject selected Selection.activeGameObject; if (selected null) { Debug.LogWarning(No GameObject selected.); return; } MeshFilter meshFilter selected.GetComponentMeshFilter(); SkinnedMeshRenderer skinnedMesh selected.GetComponentSkinnedMeshRenderer(); Mesh mesh null; if (meshFilter ! null meshFilter.sharedMesh ! null) { mesh meshFilter.sharedMesh; } else if (skinnedMesh ! null skinnedMesh.sharedMesh ! null) { mesh skinnedMesh.sharedMesh; } if (mesh null) { Debug.LogWarning(Selected object has no valid Mesh.); return; } // 1. 備份原始mesh防止破壞 Mesh clonedMesh Instantiate(mesh); clonedMesh.name mesh.name _Barycentric; // 2. 獲取三角形索引和頂點(diǎn)數(shù)據(jù) int[] triangles clonedMesh.triangles; Vector3[] vertices clonedMesh.vertices; int triangleCount triangles.Length / 3; // 3. 創(chuàng)建用于存儲(chǔ)重心坐標(biāo)的列表每個(gè)頂點(diǎn)一個(gè)Vector3 // 注意一個(gè)頂點(diǎn)可能被多個(gè)三角形共享我們需要為每個(gè)“頂點(diǎn)-三角形”對(duì)存儲(chǔ)獨(dú)立的值。 // 更簡(jiǎn)單但內(nèi)存更大的方法是將Mesh展開(kāi)不共享頂點(diǎn)這樣每個(gè)三角形的三個(gè)頂點(diǎn)都是獨(dú)立的。 // 這里采用展開(kāi)的方法。 ListVector3 newVertices new ListVector3(); ListVector3 newBarycentrics new ListVector3(); Listint newTriangles new Listint(); ListVector2 newUVs new ListVector2(); ListVector3 newNormals new ListVector3(); // 獲取原始數(shù)據(jù) ListVector2 originalUVs new ListVector2(); clonedMesh.GetUVs(0, originalUVs); ListVector3 originalNormals new ListVector3(); clonedMesh.GetNormals(originalNormals); // 4. 遍歷每個(gè)三角形復(fù)制頂點(diǎn)并分配重心坐標(biāo) for (int t 0; t triangleCount; t) { int index0 triangles[t * 3]; int index1 triangles[t * 3 1]; int index2 triangles[t * 3 2]; // 為當(dāng)前三角形的三個(gè)頂點(diǎn)分別添加數(shù)據(jù) newVertices.Add(vertices[index0]); newVertices.Add(vertices[index1]); newVertices.Add(vertices[index2]); // 分配固定的重心坐標(biāo)種子 newBarycentrics.Add(new Vector3(1, 0, 0)); newBarycentrics.Add(new Vector3(0, 1, 0)); newBarycentrics.Add(new Vector3(0, 0, 1)); // 復(fù)制UV和法線 if (originalUVs.Count index0) newUVs.Add(originalUVs[index0]); else newUVs.Add(Vector2.zero); // ... 同理復(fù)制index1, index2的UV if (originalNormals.Count index0) newNormals.Add(originalNormals[index0]); else newNormals.Add(Vector3.up); // ... 同理復(fù)制index1, index2的法線 // 設(shè)置新的三角形索引順序排列 newTriangles.Add(t * 3); newTriangles.Add(t * 3 1); newTriangles.Add(t * 3 2); } // 5. 將新數(shù)據(jù)賦值給克隆的Mesh clonedMesh.Clear(); clonedMesh.SetVertices(newVertices); clonedMesh.SetUVs(1, newBarycentrics); // 使用UV通道1存儲(chǔ)重心坐標(biāo) clonedMesh.SetTriangles(newTriangles, 0); clonedMesh.SetUVs(0, newUVs); clonedMesh.SetNormals(newNormals); clonedMesh.RecalculateBounds(); clonedMesh.RecalculateTangents(); // 如果使用法線貼圖則需要 // 6. 替換原始Mesh if (meshFilter ! null) meshFilter.sharedMesh clonedMesh; if (skinnedMesh ! null) skinnedMesh.sharedMesh clonedMesh; // 7. 保存為資源可選 // AssetDatabase.CreateAsset(clonedMesh, Assets/ clonedMesh.name .asset); // AssetDatabase.SaveAssets(); Debug.Log(Barycentric coordinates generated for: selected.name); Debug.LogWarning(Note: Mesh has been unwrapped (vertices are no longer shared). Vertex count increased from vertices.Length to newVertices.Count); } }重要提示展開(kāi)網(wǎng)格不共享頂點(diǎn)會(huì)顯著增加頂點(diǎn)數(shù)量約3倍從而增加內(nèi)存和渲染開(kāi)銷。這是為了簡(jiǎn)化Shader中重心坐標(biāo)的插值邏輯。對(duì)于靜態(tài)背景物體可以接受。對(duì)于需要?jiǎng)赢嫷腟kinned Mesh需要更復(fù)雜的方案可能需要在Shader中利用SV_VertexID或額外的紋理來(lái)映射重心坐標(biāo)。4.2 性能優(yōu)化要點(diǎn)頂點(diǎn)數(shù)量如上所述展開(kāi)網(wǎng)格是性能的主要瓶頸。對(duì)于復(fù)雜模型需要評(píng)估是否值得。替代方案是使用頂點(diǎn)ID和計(jì)算著色器在GPU端實(shí)時(shí)計(jì)算重心坐標(biāo)但這會(huì)提高Shader復(fù)雜度。Overdraw雙Pass渲染意味著每個(gè)像素至少被計(jì)算兩次表面一次線框一次。對(duì)于覆蓋屏幕面積大的物體開(kāi)銷會(huì)翻倍。確保線框Pass的像素著色器盡可能輕量并利用ZTest和ZWrite設(shè)置避免不可見(jiàn)像素的計(jì)算。Shader變體管理我們使用了#pragma multi_compile __ ENABLE_DEPTH_FADE。這意味著Unity會(huì)為啟用/禁用深度淡出各編譯一個(gè)Shader變體。要控制變體數(shù)量避免不必要的功能開(kāi)關(guān)。對(duì)于移動(dòng)端可以考慮只提供最關(guān)鍵的特性。針對(duì)URP/HDRP的適配在URP中需要將Shader改寫為URP的Lit/Unlit Shader Graph模板或者手寫HLSL并使用UniversalRenderPipeline庫(kù)。關(guān)鍵變化包括使用#include “Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl”等頭文件。頂點(diǎn)著色器使用TransformObjectToHClip代替UnityObjectToClipPos。光照信息通過(guò)URP的Light結(jié)構(gòu)體獲取而非_WorldSpaceLightPos0。需要定義RenderPipeline標(biāo)簽和Shader的RenderType。通常URP更推薦使用Shader Graph來(lái)實(shí)現(xiàn)通過(guò)自定義節(jié)點(diǎn)Custom Function Node來(lái)嵌入重心坐標(biāo)計(jì)算的核心HLSL代碼這樣更易于美術(shù)人員調(diào)整和迭代。4.3 材質(zhì)預(yù)設(shè)與示例場(chǎng)景一個(gè)完整的插件包必須包含預(yù)配置的材質(zhì)球提供幾種不同風(fēng)格如純色線框、發(fā)光線框、PBR線框混合的材質(zhì)預(yù)設(shè)。示例模型與場(chǎng)景展示插件在不同類型模型硬表面、有機(jī)體、低模、高模上的效果。使用說(shuō)明文檔清晰的步驟告訴用戶如何導(dǎo)入模型、運(yùn)行工具腳本生成數(shù)據(jù)、應(yīng)用材質(zhì)。腳本API文檔如果提供了運(yùn)行時(shí)控制線框?qū)傩匀珙伾?、寬度的腳本需要說(shuō)明其用法。5. 實(shí)戰(zhàn)應(yīng)用場(chǎng)景與進(jìn)階技巧掌握了基礎(chǔ)實(shí)現(xiàn)我們可以探索一些更酷的應(yīng)用讓線框渲染不僅僅是“顯示網(wǎng)格”。5.1 動(dòng)態(tài)線框效果通過(guò)腳本在運(yùn)行時(shí)修改Shader的屬性可以實(shí)現(xiàn)動(dòng)畫效果。using UnityEngine; [RequireComponent(typeof(Renderer))] public class DynamicWireframe : MonoBehaviour { public Color pulseColor Color.white; public float pulseSpeed 1.0f; public float minWidth 0.02f; public float maxWidth 0.1f; private Material _material; private float _timer; void Start() { // 注意為了不影響其他使用同一材質(zhì)的物體最好使用MaterialPropertyBlock或?qū)嵗馁|(zhì) _material GetComponentRenderer().material; // 這會(huì)創(chuàng)建材質(zhì)實(shí)例 } void Update() { _timer Time.deltaTime * pulseSpeed; float sinValue Mathf.Sin(_timer); float lerpFactor (sinValue 1f) * 0.5f; // 映射到0-1 // 動(dòng)態(tài)改變線寬 float currentWidth Mathf.Lerp(minWidth, maxWidth, lerpFactor); _material.SetFloat(_WireWidth, currentWidth); // 動(dòng)態(tài)改變顏色例如在基礎(chǔ)色和脈沖色之間插值 Color baseWireColor _material.GetColor(_WireColor); Color targetColor Color.Lerp(baseWireColor, pulseColor, lerpFactor * 0.5f); // 只混合一部分 _material.SetColor(_WireColor, targetColor); } void OnDestroy() { if (_material ! null) { Destroy(_material); // 銷毀運(yùn)行時(shí)創(chuàng)建的材質(zhì)實(shí)例 } } }使用MaterialPropertyBlock進(jìn)行優(yōu)化如果場(chǎng)景中有大量使用同一材質(zhì)的物體需要不同的動(dòng)態(tài)參數(shù)使用MaterialPropertyBlock而不是material屬性可以避免批處理中斷性能更好。5.2 基于距離的LOD細(xì)節(jié)層次控制當(dāng)攝像機(jī)遠(yuǎn)離物體時(shí)密集的線框會(huì)變成視覺(jué)噪音。我們可以根據(jù)物體到攝像機(jī)的距離動(dòng)態(tài)調(diào)整_WireWidth甚至完全關(guān)閉線框渲染。void Update() { float distanceToCamera Vector3.Distance(transform.position, Camera.main.transform.position); float width Mathf.Lerp(_detailWidth, _simpleWidth, distanceToCamera / _fadeDistance); // 或者使用一個(gè)曲線來(lái)更好地控制 // float width _widthCurve.Evaluate(distanceToCamera); _material.SetFloat(_WireWidth, width); // 可選超過(guò)一定距離后將線框顏色與背景色混合使其逐漸消失 if(distanceToCamera _hideStartDistance) { float fade 1.0f - Mathf.Clamp01((distanceToCamera - _hideStartDistance) / (_hideEndDistance - _hideStartDistance)); Color col _material.GetColor(_WireColor); col.a fade; _material.SetColor(_WireColor, col); } }5.3 與后期特效Post-processing結(jié)合線框效果可以和全屏后處理特效產(chǎn)生有趣的化學(xué)反應(yīng)。例如在渲染完線框物體后使用一個(gè)后處理Shader來(lái)檢測(cè)特定的線框顏色比如高亮青色然后對(duì)其應(yīng)用發(fā)光Bloom、模糊或顏色替換效果創(chuàng)造出科幻風(fēng)格的“全息投影”或“掃描”視覺(jué)效果。這需要將線框信息渲染到一個(gè)額外的緩沖區(qū)如使用RenderTexture或利用URP的Renderer Features供后處理Shader使用。6. 常見(jiàn)問(wèn)題排查與調(diào)試心得在實(shí)際使用中你肯定會(huì)遇到各種奇怪的問(wèn)題。這里記錄一些典型的坑和解決方法。6.1 線框不顯示或顯示不全檢查重心坐標(biāo)數(shù)據(jù)這是最常見(jiàn)的問(wèn)題。確保你的工具腳本正確運(yùn)行并且網(wǎng)格的UV1或你使用的通道確實(shí)包含了(1,0,0)、(0,1,0)、(0,0,1)這樣的數(shù)據(jù)。可以在Shader中臨時(shí)將barycentric坐標(biāo)作為顏色輸出檢查其是否正確。// 調(diào)試用將重心坐標(biāo)可視化為顏色 return fixed4(i.barycentric, 1.0);你應(yīng)該看到每個(gè)三角形內(nèi)部呈現(xiàn)從紅到綠到藍(lán)的漸變。如果全黑或全白說(shuō)明數(shù)據(jù)有問(wèn)題。檢查Shader中的通道語(yǔ)義確保頂點(diǎn)結(jié)構(gòu)體appdata中的barycentric變量與工具腳本中設(shè)置數(shù)據(jù)的通道如SetUVs(1, ...)語(yǔ)義匹配。TEXCOORD1對(duì)應(yīng)UV1。檢查模型縮放如果模型導(dǎo)入時(shí)縮放不是1或者父物體有縮放可能會(huì)導(dǎo)致世界空間或裁剪空間計(jì)算異常。嘗試在Shader中直接使用模型空間或裁剪空間的位置進(jìn)行計(jì)算排除縮放影響。檢查背面裁剪Cull如果Pass “WIREFRAME”中設(shè)置了Cull Back那么模型背對(duì)攝像機(jī)的面就不會(huì)渲染線框。根據(jù)需求設(shè)置為Cull Off雙面顯示或Cull Front只顯示背面線框用于特殊效果。6.2 線框閃爍Z-fighting當(dāng)線框Pass的深度測(cè)試ZTest設(shè)置不當(dāng)時(shí)線框像素與表面像素深度值極其接近會(huì)產(chǎn)生閃爍。解決方案確保線框Pass的ZTest設(shè)置為L(zhǎng)Equal默認(rèn)并且ZWrite設(shè)置為Off。這樣線框只會(huì)在已通過(guò)深度測(cè)試的表面上繪制不會(huì)修改深度緩沖避免了與自身表面的深度沖突。如果問(wèn)題出現(xiàn)在與其他物體的交錯(cuò)處可以嘗試讓線框Pass的深度偏移Offset一個(gè)很小的值。Pass { ... ZWrite Off ZTest LEqual Offset 0, -0.1 // 輕微減少深度值讓線框稍微“浮”在表面之上 ... }### 6.3 性能問(wèn)題 * **Draw Call激增**雙Pass渲染會(huì)使每個(gè)物體的Draw Call至少增加一個(gè)。確保使用了合理的合批Batching策略。對(duì)于靜態(tài)物體啟用Static Batching。對(duì)于動(dòng)態(tài)物體確保它們使用相同的材質(zhì)以促進(jìn)Dynamic Batching。使用MaterialPropertyBlock來(lái)修改每實(shí)例屬性而不是創(chuàng)建新的材質(zhì)實(shí)例。 * **Overdraw嚴(yán)重**對(duì)于大型平面或屏幕空間占比大的物體線框Pass會(huì)覆蓋幾乎所有像素造成大量Overdraw??紤]對(duì)這類物體使用更簡(jiǎn)化的線框效果或者根據(jù)攝像機(jī)距離動(dòng)態(tài)禁用線框Pass使用Shader LOD或腳本控制Material的啟用。 * **移動(dòng)端發(fā)熱**在低端移動(dòng)設(shè)備上復(fù)雜的片段著色器計(jì)算特別是軟邊抗鋸齒和深度淡出可能是負(fù)擔(dān)。提供一個(gè)“簡(jiǎn)化”版本的Shader關(guān)閉抗鋸齒_WireSmoothness0和深度淡出使用更簡(jiǎn)單的光照模型如Unlit。 ### 6.4 在URP中無(wú)法正常工作 * **Shader編譯錯(cuò)誤**首先檢查是否包含了正確的URP頭文件并且函數(shù)名、語(yǔ)義與Built-in管線不同。URP中頂點(diǎn)著色器通常返回Varyings結(jié)構(gòu)體而不是v2f。 * **光照不生效**在URP的Lit Shader中光照計(jì)算由管線完成。你的表面顏色計(jì)算函數(shù)需要重寫或者直接使用URP的SurfaceData和Lighting函數(shù)。一個(gè)更簡(jiǎn)單的方法是先實(shí)現(xiàn)一個(gè)Unlit版本的線框Shader確保核心功能正常再集成光照。 * **使用Shader Graph**對(duì)于不熟悉HLSL的美術(shù)或開(kāi)發(fā)者強(qiáng)烈推薦使用Shader Graph。你可以創(chuàng)建一個(gè)自定義函數(shù)節(jié)點(diǎn)將重心坐標(biāo)計(jì)算的核心HLSL代碼封裝進(jìn)去然后在Graph中像搭積木一樣連接節(jié)點(diǎn)控制顏色、寬度等參數(shù)。這是URP生態(tài)下更友好、更強(qiáng)大的工作流。 開(kāi)發(fā)這個(gè)插件的過(guò)程本質(zhì)上是一次對(duì)GPU渲染流水線和Shader編程的深度實(shí)踐。從最初單純想畫幾條線到深入考慮性能、兼容性、易用性和視覺(jué)效果每一步都充滿了權(quán)衡和選擇。最終得到的不僅僅是一個(gè)工具更是一套對(duì)“如何在實(shí)時(shí)渲染中優(yōu)雅地表達(dá)結(jié)構(gòu)”這個(gè)問(wèn)題的系統(tǒng)化理解。希望這份詳細(xì)的拆解能幫助你不僅用上這個(gè)插件更能理解其背后的每一行代碼和每一個(gè)設(shè)計(jì)決策從而在你自己的項(xiàng)目中創(chuàng)造出更驚艷的視覺(jué)效果。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91|九色|国产熟女| 丰满欧美放荡少妇在线| 日韩成人性日韩成人性爱视频在线免费观看 | 欧美成人综合| 国产在线激情视频| 75大香蕉| 久久精品国产亚洲妲己影视| 久久超碰、| 亚洲欧美日韩免费观看| 加勒比在线视频| 78操B| 精品亚洲黄色片 国产精品导航一区二区| 和协影院中文字幕三区| 日本性感人妻91| 天天流夜夜操| 香蕉欧美| 成人天天爽| heyZO天然素人无码AⅤ专区| 国产人妻一区二区三区欧美毛片| 亚洲一区日韩精品| 91成人社区| 天天搞在线综合网| 熟女探花啪啪| 欧美日动态视频| 免费观看网黄| 97资源站久久| 99热在线播放| 久久久久久久久999| 久久五月天婷婷| 亚洲 欧美 日韩另类 麻豆| 中文字幕在线免费观看视频| 国内精品99999| 簧片免费看视频| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 婷婷久草| 任你草| 97 色综合| 欧美大香蕉在线观看| 91美女视频在线观看| 偷拍亚洲高清图片| 发朗少妇买婬全视频中文| 亚洲欧美另类图片| 九九久久国产精品| 黄片www.| 最新av中文字幕高清| m欧洲一级午老| 日韩性爱播放| 欧美一级AAAAAAA| 岛国不卡超碰护士AV在线播放| 国产女性无套 免费观看| 97人人夜| 日韩中文字幕熟妇人妻| 免费一级欧美片片线观看| 超碰97COm中文| 亚洲日本韩国极品一区二区| av日韩国产一区二区| 欧美日韩人妻精品系列一区二区三区| 91电影色诱| 日韩少妇一区二区三区| 天天看天天干| 久久人妻| 亚洲人妻爽爽爽| 伊人久久大香蕉线AV五月天| 久热无码| 久久精品国产亚洲AV片多多| 全免费a敌肛交毛片免费| 亚洲狠| 国产人人干| 长长久久曰曰夜夜成人网| 第四色奇米影视777| 九九九精品色乱九九九| 91天射| 欧美亚洲国内自拍| a久久| 国产最新小视频在线播放下载| 91热热色| 精品少妇99| 激情文学欧美| 国产精品熟女九九九| 操一区| 亚洲综合另类小说色区亚洲成av人片在www | 99热国产| 日本欧美色| 极品丝袜无码| 久久本道| 狠狠综合网| 亚洲AV无码国产精品久久久久| 岛国福利在线精品播放| 人妻无一区二区三区| 97超碰中文在线| 啊啊啊啊,啊啊好多水| 97精品久久久久久久| 91美女中出| 亚洲最大无码中文字幕网站| 久草免费福利在线播放| 亚洲精品xxx| 韩三级a视频在线观看| 欧成人精品H无码| 97天天插| 久久宗合97| 9999久久久久| 久久精品无码熟妇一区二区三区视频导航| 麻豆a'v电影| 亚洲成人妻日韩在线| 打av高清| 亚洲综合情色| 中文字幕精品三级久久久| 久久夜夜夜| 日本久久综合| 91美女视频。| 欧美 亚洲 第一页| 欧美大波激情xxxx| 免费伦费视频在线观看| HEYZO高无码国产精品227| 日韩乱伦影音先锋| 亚洲经典啪啪| 亚洲人妻五月丁香婷婷| 少妇久久久久久久| 欧美色图20P| 俺也射| 日韩精品人妻中文字有码在线 | 2017,超碰| 日韩99999| 国产精品久久| 久久九九视频九九视频| 久久精品91| 久久视频,这里只有精品| 欧美日韩精品久久久久东北老熟妇| 9999久久久久| 日韩一级二级三级免费看完整版| 91肉片| AV一起草在线| 夜夜影视四色| 97五月天| 中文子幕一二三| 久草线上视频免费看| 九九九九一级| 超碰2017| 无码精品一区二区三区潘金莲| 99精品欧美一区二区三区桃色| 艹精品| 欧美操逼熟女| 91精品大奶人妻| 人妻熟女午夜精品在线| 97内射偷拍| 欧美黑人与女人91~| 久久伊人青青草| 激情小说亚洲视频| 久久欲| 亚洲精品影视老司机| 免费综合亚洲中文| 青草青青久久久久久国产| 婷婷三区| 综合欧美色图| 久操操AV电影| 自拍偷拍2025在线观看| 1禁看欧美黄片免费看| 97操B| 人妻丰满熟妇av无码区蜜桃| 我要去看2个日本美女.com曹逼| 日韩中文字幕精品一区在线| 天天做日日爱夜夜爽| 七久久久| 97超碰精品成| 女人被男人桶爽视频网站| 中文字幕一区日韩精| 国产不卡片| 亚洲色图 图片| 欧成人精品一区二区三区| av在线播放国产一区| 欧美一区二区亚洲天堂| 国产丝袜美腿美女麻豆| 校园春色AV天堂| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 亚洲av影音先锋| 69人妻精品一区二区绯色| 午夜欧美J进J出白浆流出久久久| 青青草综合在线| 91快色色色色色| 99热超碰| 国产suv一区二区三区6| av一区二区三区 中文| av在线人气| 神马麻豆福利院 | 亚洲双插| 园内精品自拍视频在线播放| 日韩电影天堂视频二区三区| 中文一区二区三区影院| 99精彩视频| 91影视亚洲| 欧美日韩大香蕉| 婷婷五月天av| 老熟妇91| 久久久久久AⅤ无码免费肉站 | 国色综合天| 黑人白女精品一区| 久偷拍| 91欧洲国产成人久久精品网站| 久久久97| 熟女91网| 日韩AC| 欧美日韩亚洲天堂网| 婷婷涩嫩草鲁丝久久午夜精品| 在线可观看的黄色网址| 亚洲AV不卡在线观看尤物| 97日韩| 九九黄色网| 蜜臀中文无码午夜| 中文字幕黄色一起草| 国产福利精品最新在线| 欧美日本视频一区| 色婷婷五月综合| 中出人妻中文字幕91在线| 精品中文字幕一区二区| 91爰爱欧美| 欧美传媒| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 欧美色图20p| 婷婷久久综合| 日韩有码 一区二区三区| 91人人看| 精品久久久久久中文字幕三区| 91色爽欧美| 国产精品久久久久久亚洲色欲| 欧美熟妇乱码在线一区| a片久久久久久久久久久久 | 国产激情久久久| av天堂电影网| 蜜乳AV色欲AVAV无码| 男生通女生屁股| 亚洲高清在线| 69一区二区三区| 蜜桃中文字日产乱幕4区| 欧美高清无码免费视频高清版| 极品粉嫩一区二区| 综合在线导航一区| 老熟女综合网| 日韩精品99久久久久久中文字幕| 久久av成人无码免费| 嗯嗯啊啊好大好爽| 99在线精品观看99| 黄色片A级一区二区三区| 激情视频一二三| 91成人精品在线播放| 97操综合| 无码一区二区三区四区五区六区七区八区九区十区视频 | 亚洲精品三区在线观看| 色97国产69香蕉| 一本一道人妻久久一区二区三区 | 天天干一区二区| 黄片视频观看| 国内一区二区三区| 岛国小电影| 夜间福利片1000无码| 久区视频| 神马久久啊啊| 精品999日本| 探花一区在线| 99久久久无码精品国产人| 精品少妇人妻| 久久久久久久久九九久孕交| 美女自卫慰黄网站免费| 奇米狠999| 天天亚洲| 精品久久久中文字幕不| 色婷婷视频| 国产福利电影| 美女诱惑久久| 99热国产| 91电影色诱| 色婷婷五月综合激情中文字幕| 九九九九精品| 黑丝制服中文字幕| 五十路熟女工口| 极品五月天噜噜| 永久免费发布性爱网| 精品78| 死我十八禁| 日韩av三四区| 日本一区二区电影网站| 99热9| 五月天色色网站| 亚洲无码?第一页| 欧美操人视频| 91人妻少妇| 蜜桃臀一区二区三区久久| 日本伦理一区二区| 男人干美女| 久久超碰久| 亚洲一区二区久久久久| 草莓精品视频在线免费观看| 思思久热在线精品66| 国产亚洲精品无码三区| 嗯~啊~快点 死我视频| 色综合V| 97在线视频免费看| 日韩成人小视频| 日韩精品大香蕉伊人在线| 久久男人网| 九色 人妻 大香蕉| 伊人天堂在线| www色婷婷| 日本操逼视频导航| 一级久久性爱视频| 成人性爱美曰韩| 无码天天操| www.久久制服糖| 日日狠狠久久偷偷色综合免费| 免费A V在线播放| 最近2019中文字幕国语免费版| 在线色导航| 日本人妻中文字幕精品| 最新中文字幕精品在线| 国内毛片婷婷六月色| 天天操天天射天天日| 久96热在线观看视频| 九九热三级片| 日韩无码极品| 国产91亚洲精品一区二区三区| 久久大| 五月丁香黄色网| 亚洲天堂精品日韩电影| 中文字幕人成乱码熟女香港| 欧美黄色大片在线观看| 不卡免费av在线播放| 欧美性爱视频免费一区一A| 亚洲最大的综合性av| 风流老熟女一区二区三区l| 亚洲精品无码成人久久久99| 國產尤物AV尤物在線觀看| 99九九精品| 97爱免费插| 91色黑人少妇| 中文一区二区| 精品久久久久久久| 国产精品久久aV| 久操网线| 婷婷五月影院| 中文字幕五区| 久久久九九九九| 长久操视频| 亚洲狠狠入| 青青草国产欧美非洲黑人| 国产精品 视频| 91丨九色丨国产丨人妻在线| 综合自拍| 青青草黑寡妇男人天堂| 亚洲色电影在线| 国产精品白领在线观看 | 欧美成人色| 日日摸日日弄日日拍| 精品福利| 欧美网站免费| 日产国产精品中文久久婷婷| 免费男人的天堂| 九九亚洲| 久久草在线综合视频| 麻豆人妻精品一区二区| 天天操人人操骚逼网站| 九九九九精品九九九九| 91精品无码人妻系列| 性欧美另类高清| 欧美97视频| 国产传媒一区二区三区| 99久久e免费热视| 欧美日韩免费专区在线| 强乱老妇中文字幕| 久久av一级av少妇av高潮| 黄污污污污| 激情小说亚洲视频| 国产久久成人| 偷拍欧美激情| 一区二区三| 99热思思| 蜜臀中文无码午夜| 强奸乱伦资源| 国产乱码精品久久久久久| 精品国产AV一区天美传媒| 亚洲成人一区二区精品| 久久熟妇五十路一区| 少好三P| 东北丰满熟女国产一区| 国产精品密臀网在线观看| 天天噜| 色五月首页| 啊啊啊不要嗯嗯在线观看| 家庭乱伦国产精品| 精品久久久久久久| 亚欧性爱ab| 岛国不卡超碰护士AV在线播放| 伊人专区一区二区三区| 99啪啪视频| 久久精品—区二区三区内射| 激情六月天| 精品人妻一区二区三区蜜桃视频| 福利伊人玖玖国产| 久久久久久中文| blacked精品一区国产| 久草婷婷| 激情抓乳插进去啪啪啪日韩| 久久久久久久久久久999| 国产精品久久久啊| 一区,二区,三区网站| 久久国产乱子伦精品免费女,网站| 九九99精品视频在线观看| 亚洲日韩狠狠撸视频| 成人性爱高清视频免费看| 懂色av中文字幕一区二区三区天美 | 欧美男女午夜啪啪| 精品玖九九久| 99re9这里只有精品| 无码久久亚洲高清,| 涩爱AV在线| 翔田千里无码一区| 欧美亚洲厕所精品偷拍91| 日韩国产欧美伦理在线| 久久视频少妇美女| 1禁看欧美黄片免费看| 美女丝袜激情小说| 91粉嫩萝控精品福利网站_精品影音先锋国 | 99精品欧美一区二区三区桃色| 东北女人| 欧美日韩国产色图在线| 唯美清纯 妖精视频| 国产亚州日韩欧美看片| 麻豆天美91| 青青欧美在线| 三级AV入口| 2019亚洲男人天堂| 天天干天天做| 国产精品爱欲| 成人性交午夜免费片| 熟妇视频一区二区三区在线观看| 免费的很黄很污的全部视频| 日韩欧美久久婷婷网站| 最新加勒比丝袜在线| 欧美亚洲自拍另类人妻| 嗯嗯啊啊好大好爽| 亚洲第一页色| 人妻人人做人人澡人人爽欧美一区| 欧美熟女逼久久久久久| 亚洲无码99| 思思视频免费看网站| 长久操视频| 99热思思| 高清无码 国产精品| 亚洲综合色图欧美| 91丝袜在线观看视频在线观看| 性久久| 伦理第一页| 日韩成人午夜精品久久高潮| 欧美黄色大香蕉一区二区| 神马久久午夜| 日本精品一区二区三| 欧美综合骚| 国产做?爰片久久毛片?片美国| 秋霞怕怕片| 啊啊啊啊好大好硬啊啊啊啊啊| 日韩精品区二区三区不卡| 一个国产在线综合网站| 国产精品噜噜噜日日日| 久久69精品久久久久久久| 青草成人免费视频一com| 欧美与日韩97| 伊人精品视频| 大香蕉手机在线视频| 网页导航五月天免费一二三区| 欧美综合网| 一区e区三| 国产夫妻一区二区| 99热亚洲天堂| 久久久久久久人妻| 国内精品久久久久影院亚洲| 在线观看免费视频国产| 国产一级高清免费观看| 97视频免费播放| 九九综合网| 欧亚日韩三区| 日han少妇无码| 精品国产乱码久久久久久影片| 一区二区视频在线播放| 乱伦a片视频| 亚洲麻豆av一区二区| 中文字幕1区2区| 国产AV人人夜夜澡人人爽麻豆| aaa淫乱视频| 国产夫妻一区二区| 99999久久久久9国产精品| 99爱精品| 日产狠狠干| 久久久久精| 首页亚洲国产高跟丝袜诱惑视频 | 欧美丝袜亚洲| 在线播放中文字幕| 日本幼女18+| 国模久久在线| 青青草成人视频在线观看二区| 四虎视频在线观看| 欧美日韩少妇色情| 97天天弄| 久久九操在线观看| 怡红院亚洲怡春院av| 天天超级碰碰碰| com 首页 18岁 禁区 女优 免费 精选 同城| 久久婷婷欧美| a片亚洲一本通视频| 91精品婷婷国产综合久久竹菊| 亚洲大色堂| 四虎视频在线观看| 在线情色电影 91大 | 亚洲色人妻综合| 艹我哪美一区无码| 三上制服丝AV| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美情色贴图| 青青草影视蜜久久| 东北女人性交| AAAA欧美日韩| 夜夜天天噜狠狠爱2021| 操逼逼无码| 屌色在线97视频| 澳门人妻久久| av东京热男人的天堂| 老熟妇一区二区三区啪啪| 情色五月天就去干| 女生久久网| 国产二区三区免费视频| 国产精品亚洲高清在线| 国产精品成人蜜臀AV在线| 99啪啪视频| 久久大线蕉一区| 啊啊啊啊啊啊啊在线| 精品一区二区三区麻豆| WWW美腿丝袜香蕉中文| 韩日欧亚a级| 亚州熟女乱伦| 国产精品久久久久久久AV大片| 久久性爱大全| 中日无幕一二三四区| 中文字幕78| 亚洲第一视频 欧美风情 日韩| 免费在线看黄片av| 一级久久久久久久久久久| 中文字暮97| 久久噜| 欧美色网络| 中文字幕一区二区免费在线| 狠狠色色| 好爽免费视频,| 欧美中出| 色婷五月| 欲女人妻性色av| 91天天| 人人做人人妻人人夜视频| 在线黄页看毛片| 亚洲猛交| 大香蕉专区| 天天摸天天插天天日| 日韩精品影视| 久久性爱精品一区| 小草精彩毛片| 亚洲欧美色图片| 国产小视频91| 国产精品久久久久久夜夜夜| 99rre在线精品99re8| 国产精品视频麻豆入口| 久久香蕉网| 加勒比综合a∨| 免费久久一级毛片大黄| 东京热男人的天堂网| 爱丝福利| 亚洲欧综合另类无码一区| 91l欧美在线| 日本人妻丰满熟妇久久久久久| 爱我干综合| 新精精品久久精品| 吖在线不卡一区二区国产剧情| 极品色社| 欧美Ⅴ性爱| 玖玖视频在线资源一区二区三区| 97色欧洲| 天天肏夜夜肏| 国产精品激情久久久久久久| 好舒服视频| 操逼视频国产无套| 欧美高潮在线| 日本熟妇浓毛hdsex| 五月丁香六月| 午夜精品人妻二区三区| 狠狠色噜噜狠狠狠狠狠色综合久久| 亚洲激情色片 | 亚洲色资源| 一区操逼| 国产久久一区二区| 隔壁邻居波多野结衣中文字幕| 97中文字幕色| 国产区性爱在线视频秋霞豆| 中文久久96| 3D污黄视频在线观看| 在线观看 99热| 亚洲一区二区三区AV无码| 九九国产热| 大香蕉黄色一区| 蜜臀在线网站| 五月婷久久| 91中文字幕制服丝袜免费视频| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴| 欧美在线亚洲| 久久水蜜臀亚洲AV无码精品| 精品国产91内射久久| 欧美后入视频| 黑人精品成人一区二区三区| 加勒比色99999| 999久久久九| 影音先锋日本一区二区| 92大香蕉| 熟妇亚洲一区二区三区| 精品国产一区二区三区四区在线看 | 欧美影院一区二区三区| 中文幕97| 人人色人人操在线| 超碰在线欧美性爱激情| 亚洲黄a三级三级三级看三级| 欧美日韩国内不卡| 中文AV制服乱伦| 美女干逼2| 亚洲中文字幕三级在线| 思思热一热婷婷热一热| 一区二区三区色综合| 奇米狠999| 香蕉视频精品亚洲一区二区三区在线播| 奸色色 男人天堂 天天射| 欧美大香蕉久| 天天夜夜rb| 色狠人在线99| 99色在线观看| ,成人免费啪啪视频| 中文字幕精品亚洲熟女| 东北夫妻性偷拍| 欧美日本中字另类在线| 国产福利合集| 欧美洲精品一级| 麻豆 欧美 日韩| xxx0国产在线播放| 青青草中文-久久青草精品一区二区三| 九九九色| 亚洲影视高清第一页| 日韩无码嘿咻黑热久| 国产AV激情无码久久无码| 三及片网站| 91中文精品日韩欧美在线| 丰满的三级少妇欧美久久久| 亚洲精品一区二区精品| 91熟女网| 91精品婷婷国产综合久久| 无码一区二区三区四区五区六区七区八区九区十区视频 | 香伊人在线| 四虎免费在线观看| 亚洲熟妇AV日韩熟妇在线| 91亚洲不卡一区| 婷婷六月色开| 国语av最新自产拍在线观看| 色天使亚洲综合在线观看| 精品78| 亚洲猛交| 少妇久久久免费| 偷拍网站久久男女男| 日日干日日| 日韩av不卡在线观看| 亚洲,日韩,欧美,成人播放| 女生91网站| 在线观看视频91| 色综合加勒比四四季| 天天爽天天爽| 久久精品国产免费观看99| 欧美经典一区二区三区| 一区二区三区黄色片a| 成人羞羞视频国产| 国产又黄又爽| 凹凸精品熟女在线观看| 亚洲在线91| 久草免费在线视频| 综合色一区三区二区| 亚洲天堂2020| 国产综合久久久麻桃个 | 不卡码视频| 久草色悠悠在线视频| 亚洲精品97在线| 久久欧美按摩999| 成人五月香网在线| 久久极品伊人| 亚洲精品蜜桃久久久一区二区三区| 五月天伊人| 欧美躁死她一区二区| www.99热| 天天天肏屄欧美| 日本一区二区三区精品| 91女网站| 欧美97日韩| 夜夜嗨绯色| 日日嗷| 欧美色图20P| 四虎精品一区二区| 校园春色综合网| 精品无码秘 人妻一区二区 | 东北女人的毛片| 激情一区二区三区在线观看| 久久的网站啊啊啊啊啊| a人欧美综合天堂麻豆| 超碰人妻中文在线| 久操影视| 加勒比伊人| 这里是精品| m欧洲一级午老| 欧美综合色综合| 久久精品噜噜噜成人看免欧美大片| 一二三四区电影| 天天影视亚洲| 大香蕉免费3| 韩国成人精品久久久免费看| 99久久久久| 日韩素人无码一区二区三区三州| 色香阁在线| 91天美传媒在线观看| 少妇人妻精品| 91老妇女| 18禁看网站一区| 日韩精品免费高清视频在线| 免费黄色片子| 1二区9| 天美传媒精品久久视频| 91精品人| 亚洲 国产 精品一区| 在线观看一卡二卡| 蜜臀久久久| 久久久亚洲熟妇资源| 精品国产Av无码久久久伦古装| 国产在线视频二区| 久久性爱视频| 精品人妻一区春色| 日韩有码专区| 又大又长又粗又爽又黄| 天天操av懂色| 免看60秒涩涩视频| 亚洲一区二区三区春色| 色一色综合网| 日日夜夜模| 97视频在线播放| 日本高清_区二区三区| 综合色图,成人综合网| 无码操逼天堂| 另类亚洲一区二区三区| 久久精品美女一区| 亚洲欧洲无码97久久精品| 天天摸天天操视频| 免费伦费视频在线观看| 五月久久HDAV| 视频二区美腿制服人妻欧美| 亚洲字幕一区二区| 老熟女区| 日本506070| 四虎影院成年人片| 不卡一区视频| 三级特黄60分钟播放| 麻豆精品久久久久久久| 欧美日韩亚洲国产中文永久天天看| 亚洲中文字幕在现观看| 人妻嗯啊啊在线播放| 亚州欧美综合| 国产黄色影片在线观看| 日本一区二区电影网站| 少妇精品久久| 大香蕉伊人久久| julia ann久久| 91色爽欧美| 中文字幕丰满人妻日本| 超碰国产在线| 欧美第五页| 日韩一区二区高清在线观看的| 四月丁香婷婷| 久久 精品| 色综合色综合网| 97er欧美性| 无码人妻一区二区三区色欲aⅴ| 国产女人高潮视频| 九九九九9999| 亚洲色图激情小说| 97超碰超碰| 97超碰jingpin| 亚洲色人| 九九精品美女高溯喷水| 日韩无限资源| 91亚洲精品青草| 国人欧美精品一区二区| 久久99久久99久久99人受| 18一区二区三区| 国产妇女精品视频青青草| 超碰色97| 日韩激情啪啪啪| 五月激情综合网| 啊啊啊不要好疼视频| 校园春色亚洲无码| 欧美色图亚洲激情| 欧美日韩国产三级黄色| 成人性爱美曰韩| 91国产大片| 天美传媒精品久久视频| 伊人一级免费黄片| 新婚人妻扶着粗大强行坐下| 色狠狠综合噜一二三区| 骚妻少妇精品性色无码四色A V| 国产精品久久久 | 一级片在线观看高清无码| 激情五月天色播| 大香蕉综合久久| 91熟女综合| 啪啪性爱免费视频| 啊啊啊啊好疼视频| 婷婷深爱五月| 狠狠躁伊人中文字幕| 久久秀这里有精品| 久操网无码在线| 久久精品男人的天堂| 精品一区二区成人动漫| 国产传媒一区二区三区| 99综合自拍| 久久久麻豆精品| 91成人精品| 78p欧美| 精品中文字幕第一页| 色综和网| 日本人体九九九九九九| 操人人| 大干人妻| 宅男91视频在线播放| 色综合天天| 骚逼自拍99| 国产伦精品一区二区三区视频女| 伊人网青青| 亚洲欧美啪啪| 日韩有码一区三区| 黄片色区软件| 探花视频免费观看国产专区| 久久精品99久久久久久| 91黑丝在线播放| 日韩精品黄片免费观看| 免费国产视频| 精品一区99999| 啪啪综合网| 国模不卡| 日韩免费a级毛片无码a∨| 夜夜青青无码影院| 亚洲色性情三级| 色婷五月天| 能在线播放的国产三级| 91爱网| 就去色综合| 粉嫩AV输入| 狠狠狠一区二区三区| 约操熟妇| 欧美精品久久96人妻无码| 久久亚州大香蕉| 成人精品视频一区二区| 五月激情综合网| 最新中文字幕精品在线| 国产成年女黄特黄| 色香欲综合| 国产AV线| 试看福利| 超碰97最新人妻| 国产不卡片| 久久久久9| 午夜一区二区三区国产| 国产原创精品| 啪啪啪亚欧美视频| 性欧美天天| 天天精品| 搡老女人老91二区| 色诱avtt| 亚洲暴力强奸AV| 91精品操美女| 五月婷婷深深爱| 精品无码一区二区三区色欲| 色情成人五月天| 免费无码国产精品v片在线观看| 精品亚洲| 日产操逼| 精品视频一区二区| 国产精品一区二区三区四区五区| 亚洲蜜臀精品视频久久| 91九九九吃| 天天天天天超碰| 男生女生啊啊啊啊| 97看操| 欧美韩国你懂得在线 | 一区二区三区欧美激情| 欧美视频一区二区在线| 18禁看网站一区| 久久精品福利影院| 国模无码人体一区二区三| 呦呦一区| 狠狠干精品一二三四五六2022| 成人26uuu| 色偷偷综合91久久噜噜| 91久久久视| 久久综合婷婷| 国产传媒操逼视频| 91美| 97精品久久久久中文字幕| 日韩福利综合一区| 国产久久久久久| 91av熟女人妻| 色盈盈影院| 干日本人少妇午夜寂寞影院| 欧洲黄色网| 熟妇人妻精品一区二区| 九九九九九九九九九五码| 精品无码久久久| 亚洲成人综合在线| 亚洲成人日韩小说| 无码人妻精品一区二区中文| 天天色欧美| 90后后入| 韩国毛片一区二区三区| 青青草视频久久久久| 色综合99| 亚洲国产精品9999在线观看| 国产精品懂色tv影视免费观看| 强奸乱伦Av网| 日本成人A片网站| 国产亚洲日韩欧| 超碰91在线| 日比av无码| 久九九九九九九九热| 久草精品一区| 亚洲色9| 97看操| 综合网久久| 91人妻视频在线| 97电影院超碰| 婷婷五月天激情四射| 亚洲无码一区二区三区三州| 最新av网站在线观看| 亚洲男人综合| 一本精品日本在线视频精品 | 国产激情久久久| 啊v视频在线观看| 成人网站 免费观看| 免费一级a毛片久久久久久鸭绿欲| 夜夜欢天天干| 欧美色乱| 久热一区二区| 蜜乳AV免费观看| 国产精品一区二区亚洲人成毛片| 日韩欧美亚欧在线视频| 久久欲| 18禁中文字幕| www.黄色在线| 国产又色又爽又舒服的三级视频| 免费综合亚洲中文| 曰韩av中文字幕专区| 男人的天堂不卡一区二区| 欧美后进式| 九九玖玖精品| 97精品97久久| 97人人色| 中出欧美| 人人操人人摸人人看人人干| 免费在线黄片视频| 日韩精品中文字幕二区| 女人爽到高潮久久久| 97一区二区蜜臀| 一本正道久久熟女| 午夜精品久久999热蜜桃介男人用| 天海翼久久| 欧色网址| 88xx成人精品视频| 亚洲欧美日韩免费电影| 亚洲色久| 人妻出轨一区二区三区| 狠狠色一区二区中文字幕| 尤物AV免费网站| 久久超碰日韩精品| 中文字幕美女91| 日韩黄色成人性爱| 无码99| 校园春色中文字幕AV| 丝袜综合网| 五月天欧美色图| 校园春色五月天| 综合激情五月天| 欧美91色| 日韩人妻一区二区精品| 久久伦理视频久久大香蕉视频| 老司机福利青青草| 日韩在线AB| 午夜爽爽爽| 色色操| 麻豆成人AV| 五月丁香影视| 一牛一区二区三区久久| www.99色| 色爱欲亚洲| 国产操逼视频在线观看| 亚洲天堂另类小说男人| 日本淫乱女一区二区三区视频| 丰满欧美少妇| 超碰九7| 色综合美国| 久久中文字幕不卡人妻| 欧美美女啪啪视频| 久久久一区二区三区四区五区| 日韩无码黄色片| 天美传媒av在线| 久久精品中文字幕无码l| 日韩精彩视频| 欧美日韩中文亚洲v在线综合| 欧美日韩人妻少妇 一区二区三区| 欧美老妇曰批的视频| 国产大片精久久久久久| 性videos欧美熟妇hdx| 妇女视频网站| 在线观看亚洲专区| 亚洲久久东京热一二三四五区视频| 岛国黄色短视频| 一本大道久| 九九无码视频| 欧美性色网| 亚洲无码99| 欧美第二页| 97超碰天天爱天天爱| 人人看人人爰人人操| 青久操| 夜夜影视四色| juliaann欧美丝袜办公室| 六月色色| 一起草三级AV电影在线观看 | 啪啪AV导航| av2014 日韩在线中文字幕| 丁香五月婷婷五月| 亚洲男人综合| 欧美在线视频观看一二三四区高清| 强奸乱伦大香蕉网| 97视频免费播放| 操B久久| 在线播放中文字幕| 中文字幕三四区| www.高清无码诱惑一区.com | 国产一区二区二区按摩精品啪视频| www.99热| 国内毛片国产欧美拍| 久久久久久裸体| 色婷婷成人| 成人小电影网站tex| 日本女厕偷拍| 思思性爱| 风间由美日韩欧美久久| 男人天堂.AB| 91在线无码精品秘 软件| 91在线视频国产网站| 99这里都是精品| 天天综合亚在线| 人妻少妇被猛烈进入中| 人妻铁牛TV| 熟妇激情| 激情图片亚洲色图| 91精品大奶人妻| 中文乱码字幕观看| 欧美大色交| 日韩乱码Av| 亚洲色诱惑| 国产精品麻豆免费视频| 亚洲高清在线| 久久久久久日韩| 色吧5亚洲| 亚洲美腿丝袜香蕉影视欧美成人| 高树玛利亚无码流出| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴| 黄色香蕉视频网站一区| 91麻豆天美传媒在线| 色偷综合| 91殴美大片| 99精品在线| 激情接吻视频久久久久久| 91露脸熟女专区| 亚洲在线欧美| 2017,超碰| 男人天堂网手机版婷婷| 在线黄色污污网站| 高凊专区人人操| 国产精品岛国片在线观看| 日韩有码 一区二区三区| 欧美偷拍| 精品十八在线观看| 一二三四视频在线社区中文字幕| 日本一片一区| 色性综合| 情侣开房子拍 日韩无码 女的很漂亮| 国产美女高潮叫床视频| 亚洲欧洲中文日韩女优乱码| 日韩啪啪视频| 婷婷性网| 4虎在线观看| 俺也射| 91久久久久| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 综合网97| 日韩中文字幕宗合在线| 九九久久国产精品| 天天看特黄的免费网站| 久久9久9久99久9久9| 亚洲综合另类欧美久久久| 亚洲色天堂日韩中| 久久直播国产| 色久桃花影院在线观看| 国产自产自拍| 国产一区二区av综合| 欧美日韩国产中文精品字幕自在自线| 日韩乱伦影音先锋| 美中日韩无码| 99热国产| 91大学精品激情戏| 中文字暮97| 夫妻四区五区六区| 老熟妇综合| 欧美变态激情网| 91麻豆天美国产欧美高潮| 亚洲激情深爱文学小说网站| 一本大道青青| 国产丝袜啪啪| 日韩AV噜噜噜一区二区三区四区 | 日韩精品怡红院| 91N综合在线| 啊啊啊 在线| 91第一页| 不卡中文字幕aⅴ在线| 亚洲日韩在线a不卡99精品| 欧美αv.com| 亚洲av淫乱| 亚洲国男人的天堂| 人妻日日夜夜精品| 日本一区二区电影网站| 99精品久久久久久久婷婷| 久久精视频美日韩在线视频| 怡红院一区二区熟女人妻| www.婷婷六月天| 亚洲色图激情小说| 亚洲色丰满少妇高潮| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 啊啊啊操死我| 爽极品影院| 综合一区中亚洲国产成人综合精品 | 国产成人无码a| 欧美性爱另类综合| 久久久999日本大片| 综合欧美日韩在线| 久久大香蕉97| 亚欧毛片基地国产毛片基地| 人妻一区视频| 操人妻少妇中文 |