日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity烘培单个物体_Unity可编程渲染管线(SRP)教程:二、自定义着色器

發布時間:2023/12/1 编程问答 96 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity烘培单个物体_Unity可编程渲染管线(SRP)教程:二、自定义着色器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文翻譯自Catlike Coding,原作者:Jasper Flick。

本文經原作者授權,轉載請說明出處。

原文鏈接在下:

https://catlikecoding.com/unity/tutorials/scriptable-render-pipeline/custom-shaders/?catlikecoding.com

本章內容如下:

  • 編寫HLSL著色器
  • 定義常量緩沖區
  • 使用unity渲染管線核心庫
  • 支持動態批處理和GPU實例化

這是Unity可編程渲染管線系列教程的第二章。這章主要介紹了如何用HLSL編寫一個著色器,以及怎么在單個draw call中批量高效地渲染多個物體。

本教程使用Unity 2018.3.0f2完成。

一、自定義無光著色器(Unlit Shader)

雖然我們可以使用默認的unlit shader來測試我們的渲染管線,但是要充分利用自定義渲染管線的強大功能,我們需要為它創建自定義著色器。因此,我們將創建一個自己的著色器來取代Unity的默認unlit shader。

1.1 創建一個著色器

可以通過“Assets / Create / Shader/Unlit Shader”創建一個著色器。刪除創建的文件中所有的默認代碼,并命名為Unlit。

Unlit Shader

關于著色器的基礎知識在 Rendering 2, Shader Fundamentals 章節中。如果你對此不熟悉,請仔細閱讀。一個能夠正常運行的著色器至少要定義一個Shader語塊,其中必須包含一個Properties語塊和一個SubShader語塊,而SubShader語塊中必須包含一個Pass語塊。Shader后面的字符串會展現在材質球的shader下拉菜單中,我們用"My Pipeline/Unlit"來命名它。

Shader "My Pipeline/Unlit" {Properties {}SubShader {Pass {}} }

把Unlit Opaque材質球的shader屬性設置成我們剛剛創建的shader。

使用自定義著色器的Unlit opaque材質球

1.2 HLSL

自定義著色器的代碼要寫在著色器的pass語塊中。Unity支持GLSL或HLSL,雖然GLSL用于默認著色器,但是Unity新的渲染管線著色器是使用HLSL編寫的,因此我們也是用HLSL。這意味著我們必須將所有代碼放在HLSLPROGRAM和ENDHLSL語句之間。

Pass {HLSLPROGRAMENDHLSL }

Unity著色器至少需要包含一個頂點著色器和一個片元著色器,每個著色器都用一個pragma編譯器指令定義。我們把頂點著色器命名為UnlitPassVertex,片元著色器命名為UnlitPassFragment。但是我們不會直接把這些函數放在著色器文件中。我們把HLSL代碼放在一個單獨的包含文件中,我們也將其命名為Unlit,但使用.hlsl擴展名。把它放在與Unlit.shader相同的文件夾中,然后在pragma指令之后包含HLSL程序。

HLSLPROGRAM#pragma vertex UnlitPassVertex#pragma fragment UnlitPassFragment#include "Unlit.hlsl"ENDHLSL

不幸的是,Unity沒有方便的菜單項來創建HLSL文件。您必須自己創建它,先復制Unlit.shader文件,然后把文件擴展名更改為hlsl并刪除其中的著色器代碼。

在文件被包含多次的情況下,為了防止出現重復代碼,我們要在包含文件中以包含防護開頭。雖然這種情況永遠不會發生,但最好始終為每個包含文件執行此操作。

#ifndef MYRP_UNLIT_INCLUDED #define MYRP_UNLIT_INCLUDED#endif // MYRP_UNLIT_INCLUDED

在頂點著色器中我們至少需要知道頂點的坐標,另外它必須輸出一個齊次裁剪坐標中的位置。因此,我們在頂點著色器的輸入和輸出結構中都要定義一個float4類型的位置變量。

#ifndef MYRP_UNLIT_INCLUDED #define MYRP_UNLIT_INCLUDEDstruct VertexInput {float4 pos : POSITION; };struct VertexOutput {float4 clipPos : SV_POSITION; };#endif // MYRP_UNLIT_INCLUDED

接下來,我們定義頂點著色器的函數UnlitPassVertex。目前,我們將直接使用模型空間的頂點位置作為剪輯空間中的頂點位置作為輸出。雖然這不正確,但是可以馬上得到一個可以正確編譯的著色器。我們稍后會添加正確的坐標轉換代碼。

struct VertexOutput {float4 clipPos : SV_POSITION; };VertexOutput UnlitPassVertex (VertexInput input) {VertexOutput output;output.clipPos = input.pos;return output; }#endif // MYRP_UNLIT_INCLUDED

目前我們仍然使用默認的白色作為片元著色器的輸出,所以在片元著色器中簡單地返回float4類型的1。頂點著色器的輸出經過柵化器插值后輸入到片元著色器,因此將其作為片元著色器的參數,即便我們尚未使用它。

VertexOutput UnlitPassVertex (VertexInput input) {VertexOutput output;output.clipPos = input.pos;return output; }float4 UnlitPassFragment (VertexOutput input) : SV_TARGET {return 1; }#endif // MYRP_UNLIT_INCLUDED

1.3 轉換矩陣

此時我們擁有了一個能夠正確編譯的著色器,即使它還不能產生合理的結果。下一步是要把頂點坐標轉換為正確的空間。如果我們有一個模型-觀察-投影矩陣,那么我們可以直接從模型空間轉換到裁剪空間,但Unity不會為我們創建這樣的矩陣。它提供了一個可用的模型矩陣,我們可以使用它從模型空間轉換為世界空間。我們需要一個float4x4 unity_ObjectToWorld變量來存儲這個矩陣。當我們使用HLSL時,我們必須自己定義該變量。然后在頂點著色器中把模型頂點坐標轉換到時間空間。

float4x4 unity_ObjectToWorld;struct VertexInput {float4 pos : POSITION; };struct VertexOutput {float4 clipPos : SV_POSITION; };VertexOutput UnlitPassVertex (VertexInput input) {VertexOutput output;float4 worldPos = mul(unity_ObjectToWorld, input.pos);output.clipPos = worldPos;return output; }

接下來,我們需要將世界空間轉換為裁剪空間。這是通過觀察-投影矩陣完成的,Unity是通過float4x4 unity_MatrixVP變量提供的。添加它然后完成坐標轉換。

float4x4 unity_MatrixVP; float4x4 unity_ObjectToWorld;…VertexOutput UnlitPassVertex (VertexInput input) {VertexOutput output;float4 worldPos = mul(unity_ObjectToWorld, input.pos);output.clipPos = mul(unity_MatrixVP, worldPos);return output; }

我們的著色器現在可以正常工作了,所有使用unlit材質球的對象再次可見了,但是全是白色的。由于著色器內部使用轉換矩陣和四維的坐標向量相乘,所以我們現在的轉換乘法效率不高。坐標向量的第四個分量總是1,通過明確這一點,我們可以使編譯器優化計算。

float4 worldPos = mul(unity_ObjectToWorld, float4(input.pos.xyz, 1.0));

1.4 常量緩沖區

Unity沒有為我們提供模型-觀察-投影矩陣,因為這樣可以避免模型矩陣和觀察-投影矩陣的乘法。除此之外,觀察-投影矩陣可以重復用于在同一幀中使用相同相機繪制的所有內容。因為這一點,Unity的著色器將這些矩陣放在不同的常量緩沖區中。雖然我們將它們定義為變量,但它們的數據在繪制單個物體時保持不變,并且還不知如此。我們把觀察-投影矩陣放入per-frame緩沖區,而模型矩陣放入per-draw緩沖區。

雖然并不嚴格要求將著色器變量放在常量緩沖區中,但這樣做可以更有效地更改同一緩沖區中的所有數據。至少,在圖形API支持的情況下是這樣。但是OpenGL并不支持。

為了盡可能高效,我們要使用常量緩沖區。Unity將VP矩陣放在UnityPerFrame緩沖區中,將模型矩陣放在UnityPerDraw緩沖區中。還有更多的數據放在這些緩沖區中,但我們還不需要它,因此不需要包含。除了cbuffer關鍵字以及變量仍然可以像以前一樣訪問,常量緩沖區的定義和結構體一樣。

cbuffer UnityPerFrame {float4x4 unity_MatrixVP; };cbuffer UnityPerDraw {float4x4 unity_ObjectToWorld; }

1.5 核心庫

由于常量緩沖區不是在所有平臺都能提高效率,因此Unity著色器通過宏控制,在需要的時候打開它們。需要使用帶有name參數的CBUFFER_START宏而不是直接只用cbuffer關鍵字,并且在常量緩沖區末尾使用CBUFFER_END宏。

CBUFFER_START(UnityPerFrame)float4x4 unity_MatrixVP; CBUFFER_ENDCBUFFER_START(UnityPerDraw)float4x4 unity_ObjectToWorld; CBUFFER_END

由于這兩個宏未定義,會導致編譯器報錯。我們將利用Unity渲染管道核心庫來解決這個報錯,而不需要弄清楚應該何時使用常量緩沖區并自己定義宏。它可以通過包管理器窗口添加到我們的項目中。切換到All Packages列表并在Advanced下啟用Show preview packages,然后選擇Render-pipelines.core并安裝它。我正在使用版本4.6.0預覽版,這是Unity 2018.3可使用的最高版本。

現在我們可以通過路徑"Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"來包含公共庫功能。它定義了多個有用的函數和宏,包括常量緩沖區宏,因此在使用它們之前包含它。

#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"CBUFFER_START(UnityPerFrame) float4x4 unity_MatrixVP; CBUFFER_END

1.6 編譯目標等級

對于大多數平臺而言,我們的著色器又能正常工作。在包含公共庫之后,我們的著色器在OpenGL ES 2平臺下會編譯報錯。這是因為默認情況下,對于OpenGL ES 2平臺而言, Unity著色器編譯器不支持核心庫。我們可以通過添加"#pragma prefer_hlslcc gles"編譯指令到我們的著色器來解決這個問題,這正是Unity的輕量級渲染管線的做法。但是,我們根本不打算支持OpenGL ES 2,因為它僅在老舊的移動設備上才使用。我們通過使用"#pragma target"編譯指令把著色器的編譯目標等級改成3.5而不是默認的2.5。

#pragma target 3.5#pragma vertex UnlitPassVertex#pragma fragment UnlitPassFragment

1.7 文件結構

核心庫的所有HLSL包含文件都位于ShaderLibrary文件夾中。我們也要這樣做,所以在My Pipeline文件夾中創建兩個文件夾ShaderLibrary和Shaders,將Unlit.hlsl放在ShaderLibrary文件夾中,將Unlit.shader放在Shaders文件夾中。

同時我們要把色器中包含文件的路徑"Unlit.hlsl"改為"../ShaderLibrary/Unlit.hlsl"。

#include "../ShaderLibrary/Unlit.hlsl"

二、動態批處理

現在我們有了一個最簡單的自定義著色器,我們可以用它來進一步研究我們的管線如何渲染。一個重要的問題是它的效率如何。我們在場景中創建大量的使用我們自定義著色器渲染的球體來測試一下。值得注意的是要保持他們縮放一致。

我們可以通過幀調試器來研究場景是如何被繪制的,你會注意到每個球體都需要單獨的draw call。這不是很有效,因為每次draw call中CPU和GPU都需要進行通信,這會導致開銷。理想情況下,多個球體可以通過一次draw call一起繪制。雖然這是可能的,但目前還沒有發生。當您選擇其中一個繪制調用時,幀調試器會給我們一個提示。

2.1 啟用批處理

通過幀調試器,我們發現沒啟用動態批處理,因為它被禁用了或者是深度排序會干擾它。如果您檢查播放器設置,那么您將看到確實禁用了動態批處理選項。但是,即使啟用它,也無效。這是因為播放器設置適用于Unity的默認渲染管線,而不是我們的自定義管線。

要為我們的管線啟用動態批處理,我們必須在MyPipeline.Render中把draw settings的flags設置為DrawRendererFlags.EnableDynamicBatching。

var drawSettings = new DrawRendererSettings(camera, new ShaderPassName("SRPDefaultUnlit"));drawSettings.flags = DrawRendererFlags.EnableDynamicBatching;drawSettings.sorting.flags = SortFlags.CommonOpaque;

修改之后,我們發現仍然沒有使用動態批處理,但是原因以及變了。動態批處理意味著Unity在繪制之前將物體合并在一個mesh中,這需要消耗每幀的CPU時間并且物體的頂點數不能超過300。

球體頂點數太多,立方體頂點數少可以使用動態批處理。因此,把所有物體改成立方體網格。你可以全選,并一次調整它們的網格過濾器。

2.2 顏色

動態批處理適用于使用相同材質繪制的小網格(頂點較少的物體)。但是當涉及多種材質球時,事情變得更加復雜。為了說明這一點,我們需要更改無光著色器的顏色。將color屬性添加到它的Properties語塊中,并命名為_Color,把"Color"作為標簽, 白色作為默認值。

Properties {_Color ("Color", Color) = (1, 1, 1, 1)}

現在我們可以調整材質的顏色了,但它還不會影響繪制。需要把一個float4 _Color變量添加到Unlit.hlsl文件中并在片元著色器中返回該變量,而不是固定值。顏色是根據材質球定義的,因此可以放在一個常量緩沖區中,只需要在切換材質球時更改。我們將緩沖區命名為UnityPerMaterial。

CBUFFER_START(UnityPerDraw)float4x4 unity_ObjectToWorld; CBUFFER_ENDCBUFFER_START(UnityPerMaterial)float4 _Color; CBUFFER_ENDstruct VertexInput {float4 pos : POSITION; };…float4 UnlitPassFragment (VertexOutput input) : SV_TARGET {return _Color; }

復制材質球并設置成不同的顏色,以便我們區分它們。然后選擇一些物體并讓它們使用新材質球。

動態批處理的批次變多了。因為不同的材質球需要不同的per-material數據,所以每種材質球至少需要一個批次。但是通常會有更多的批次,因為Unity會在空間上對物體進行分組以減少重復繪制。

2.3 批處理選項

動態批處理可能產生好處,但也可能最終并沒有什么用,甚至拖慢速度。如果場景中不包含許多共享相同材質球的小網格(頂點較少的物體),則禁用動態批處理可能是有意義的,因此Unity就不必每幀判斷是否使用動態批處理。因此,我們將添加一個選項,以便為我們的管線啟用或禁用動態批處理。我們不能依賴播放器設置,而是需要添加了一個配置字段到我們的MyPipelineAsset,因此我們可以通過編輯器中的管線資源文件對其進行配置。

[ SerializeField ]bool dynamicBatching;

當MyPipeline實例被創建時,我們要告訴它是否使用動態批處理。我們將在調用其構造函數時將此信息作為參數傳過去。

protected override IRenderPipeline InternalCreatePipeline () {return new MyPipeline(dynamicBatching); }

因此,我們不能再依賴于MyPipeline的默認構造函數了。需要為MyPipeline添加一個公共構造函數,使用布爾參數來傳遞動態批處理設置,然后添加一個DrawRendererFlags類型的變量drawFlag。在構造函數設置為drawFlag賦值。

DrawRendererFlags drawFlags;public MyPipeline (bool dynamicBatching) {if (dynamicBatching) {drawFlags = DrawRendererFlags.EnableDynamicBatching;}}

將drawFlag復制給Render函數中的drawSettings.flags。

drawSettings.flags = drawFlags;

當我們在編輯器中切換管線資源的動態批處理選項時,Unity的批處理行為會立即發生變化。每次我們調整管線資源時,都會創建一個新的管線實例。

三、GPU實例化

動態批處理不是我們可以減少每幀draw call次數的唯一方法。另一種方法是使用GPU實例化,在這種情況下,CPU通過單個調用告訴GPU需要多次繪制指定的網格和材質的組合。這使得可以對使用相同網格和材質的對象進行分組,而無需構造新網格。這也消除了網格大小的限制。

3.1 GPU實例化選項

默認情況下GPU實例化是開啟的,但我們要自定義一個標記來控制它。讓GPU實例化成為可選項,這樣可以很容易地比較GPU實例化在啟用和禁用下的不同結果。在MyPipelineAsset中添加一個可配置字段,并將其傳遞給MyPipeline的構造函數。

[SerializeField]bool instancing;protected override IRenderPipeline InternalCreatePipeline () {return new MyPipeline(dynamicBatching, instancing);}

在MyPipeline的構造函數中,我們需要設置GPU實例化標志。在這種情況下,標志值是DrawRendererFlags.EnableInstancing,把該值和之前的drawFlags做邏輯或運算,如此可以同時啟用動態批處理和GPU實例化。當它們都被啟用時,Unity傾向于使用GPU實例化。

public MyPipeline (bool dynamicBatching, bool instancing) {if (dynamicBatching) {drawFlags = DrawRendererFlags.EnableDynamicBatching;}if (instancing) {drawFlags |= DrawRendererFlags.EnableInstancing;}}

3.2 材質球支持

當我們的渲染管線啟用GPU實例化時,并不意味著渲染的物體就能實現GPU實例化,它還要求渲染的物體所使用的材質球支持GPU實例化。因為并不總是需要GPU實例化,所以它是一個可選項,這需要兩個著色器變量:一個支持實例化,另一個不支持實例化。我們可以把#pragma multi_compile_instancing指令添加到著色器來創建所必需的變量。在我們的例子中,會產生兩個著色器變量,一個啟用INSTANCING_ON宏,另一個禁用INSTANCING_ON宏。

#pragma target 3.5#pragma multi_compile_instancing#pragma vertex UnlitPassVertex#pragma fragment UnlitPassFragment

添加新的指令之后,我們的材質球中會出現一個新的可配置選項:啟用GPU實例化。

3.3 著色器支持

啟用GPU實例化時,會告訴GPU使用相同的常量數據多次繪制相同的網格。但模型矩陣是該數據的一部分。這意味著我們最終還是不能在一個draw call中多次渲染相同的網格。要解決該問題,必須將包含所有對象的模型矩陣的數組放入常量緩沖區中。每個實例都使用自己的索引繪制,通過該索引可以從數組中獲取正確的模型矩陣。

在禁用實例化時需要使用unity_ObjectToWorld矩陣,在啟用實例化時需要使用矩陣數組。為了使頂點著色器在兩種情況下的的代碼保持一致,我們將為模型矩陣定義一個宏:UNITY_MATRIX_M。我們之所以這樣命名,是因為核心庫的包含文件中已經定義了該宏來支持GPU實例化。

CBUFFER_START(UnityPerDraw)float4x4 unity_ObjectToWorld; CBUFFER_END#define UNITY_MATRIX_M unity_ObjectToWorld…VertexOutput UnlitPassVertex (VertexInput input) {VertexOutput output;float4 worldPos = mul(UNITY_MATRIX_M, float4(input.pos.xyz, 1.0));output.clipPos = mul(unity_MatrixVP, worldPos);return output; }

在我們把模型矩陣定義為UNITY_MATRIX_M之后,添加包含文件:UnityInstancing.hlsl,因為它可以在需要的情況下重新定義宏來支持GPU實例化。

#define UNITY_MATRIX_M unity_ObjectToWorld#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"

當使用實例化時,當前正在繪制的對象的索引會被GPU添加到其頂點數據。UNITY_MATRIX_M依賴于索引,所以我們必須把它添加到VertexInput結構中。我們可以使用UNITY_VERTEX_INPUT_INSTANCE_ID宏來幫助我們獲取索引。

struct VertexInput {float4 pos : POSITION;UNITY_VERTEX_INPUT_INSTANCE_ID };

最后,在使用UNITY_MATRIX_M 宏之前,我們必須通過使用UNITY_SETUP_INSTANCE_ID宏(該宏該收input作為參數)來設置索引ID。

VertexOutput UnlitPassVertex (VertexInput input) {VertexOutput output;UNITY_SETUP_INSTANCE_ID(input);float4 worldPos = mul(UNITY_MATRIX_M, float4(input.pos.xyz, 1.0));output.clipPos = mul(unity_MatrixVP, worldPos);return output; }

現在立方體實現了GPU實例化。像動態批處理一樣,我們最終還是有多個批次,那是因為我們使用了不同的材質球。需要確保使用的所有材質球都啟用了GPU實例化。

除了模型-世界的矩陣之外,世界-模型矩陣也被默認添加在實例化緩沖區中。這些是模型矩陣的逆矩陣,在我們只使用統一縮放的情況下,我們不需要這些額外的矩陣。我們可以通過把#pragma instancing_options assumeuniformscaling指令添加到我們的著色器來從緩沖區中去掉世界-模型矩陣。

#pragma multi_compile_instancing#pragma instancing_options assumeuniformscaling

如果需要支持非統一縮放,則必須使用未啟用此選項的著色器。

3.4 不同顏色

如果我們想在場景中使用多種顏色,我們需要制作不同的材質球,這意味著批次會增加。既然矩陣可以放在數組中,那么顏色應該也可以。所以可以在一個draw call中繪制不同顏色的對象。

第一步,我們需要為每個物體單獨設置顏色。我們不能通過材質球來做到這一點,因為這是所有物體共享的資源。我們需要創建一個組件,命名為InstancedColor,給它一個可配置的顏色字段。由于它不是自定義渲染管線的一部分,所以把該文件放在My Pipeline文件夾之外。

using UnityEngine;public class InstancedColor : MonoBehaviour {[SerializeField]Color color = Color.white; }

為了覆蓋材質球的顏色,我們需要創建一個MaterialPropertyBlock對象,通過SetColor方法設置它的"_Color "屬性,然后通過調用MeshRenderer的SetPropertyBlock方法將它傳遞給物體的材質球。我們假設顏色在播放模式中不會改變,所以在Awake方法中進行這些操作。

void Awake () {var propertyBlock = new MaterialPropertyBlock();propertyBlock.SetColor("_Color", color);GetComponent<MeshRenderer>().SetPropertyBlock(propertyBlock);}

把我們的組件添加到場景中的一個對象上。在進入播放模式后你能看到它的顏色發生變化。

要在編輯模式下立即查看場景中的顏色更改,需要把設置顏色的代碼移動到OnValidate方法中,然后在Awake中調用OnValidate方法。

void Awake () {OnValidate();}void OnValidate () {var propertyBlock = new MaterialPropertyBlock();propertyBlock.SetColor("_Color", color);GetComponent<MeshRenderer>().SetPropertyBlock(propertyBlock);}

把組件添加到所有物體上,同時確保他們使用相同的材質球,然后給不同的物體設置不同的顏色,注意不能在物體上重復添加該組件。

每次通過MaterialPropertyBlock設置顏色時,我們都會創建一個新實例。這不是必需的,因為每個MeshRenderer在內部會生成一個屬性塊的拷貝來追蹤被覆蓋的屬性。這意味著我們可以重復使用MaterialPropertyBlock實例,因此生成一個靜態的屬性塊,僅在需要時創建它。

static MaterialPropertyBlock propertyBlock;…void OnValidate () {if (propertyBlock == null) {propertyBlock = new MaterialPropertyBlock();}propertyBlock.SetColor("_Color", color);GetComponent<MeshRenderer>().SetPropertyBlock(propertyBlock);}

此外,我們可以通過Shader.PropertyToID方法來獲取屬性ID,從而略微加快color屬性的匹配。每個著色器屬性名稱都會生成一個全局整數標識。這些標識在單個會話期間始終保持不變,即播放和編譯之間。所以我們獲取一次,把它賦值給一個靜態字段。

static int colorID = Shader.PropertyToID("_Color");…void OnValidate () {if (propertyBlock == null) {propertyBlock = new MaterialPropertyBlock();}propertyBlock.SetColor(colorID, color);GetComponent<MeshRenderer>().SetPropertyBlock(propertyBlock);}

3.5 Per-Instance不同顏色

為每個物體設置不同的顏色會影響GPU實例化。雖然我們使用的是相同的材質球,但是用于渲染的數據(顏色)卻不同。當使用不同顏色時,會導致每個物體被單獨繪制。

為了使GPU實例化再次起作用,需要把顏色數據放在一個數組中,就像模型矩陣一樣處理。在這種情況下,我們需要自己完成,因為核心庫不會為自定義屬性重新定義宏。我們通過UNITY_INSTANCING_BUFFER_START宏和對應的結束宏手動創建一個用于GPU實例化的常量緩沖區,并且命名為PerInstance。在緩沖區內,我們將顏色定義為UNITY_DEFINE_INSTANCED_PROP(float4, _Color),當禁用GPU實例化時該宏就相當于float4 _Color,當啟用GPU實例化時我們會得到一組實例數據。

//CBUFFER_START(UnityPerMaterial)//float4 _Color; //CBUFFER_ENDUNITY_INSTANCING_BUFFER_START(PerInstance)UNITY_DEFINE_INSTANCED_PROP(float4, _Color) UNITY_INSTANCING_BUFFER_END(PerInstance)

為了訪問顏色值的代碼在啟用或者禁用GPU實例化時能保持一致,我們通過UNITY_ACCESS_INSTANCED_PROP宏來獲取顏色值,把緩沖區和屬性的名稱傳給該宏。

float4 UnlitPassFragment (VertexOutput input) : SV_TARGET {return UNITY_ACCESS_INSTANCED_PROP(PerInstance, _Color); }

現在我們必須在片元著色器中使用實例索引。把UNITY_VERTEX_INPUT_INSTANCE_ID添加到到VertexOutput,然后使用UNITY_SETUP_INSTANCE_ID宏來設置索引ID。最后,我們使用UNITY_TRANSFER_INSTANCE_ID宏把索引從頂點輸入復制到頂點輸出。

struct VertexInput {float4 pos : POSITION;UNITY_VERTEX_INPUT_INSTANCE_ID };struct VertexOutput {float4 clipPos : SV_POSITION;UNITY_VERTEX_INPUT_INSTANCE_ID };VertexOutput UnlitPassVertex (VertexInput input) {VertexOutput output;UNITY_SETUP_INSTANCE_ID(input);UNITY_TRANSFER_INSTANCE_ID(input, output);float4 worldPos = mul(UNITY_MATRIX_M, float4(input.pos.xyz, 1.0));output.clipPos = mul(unity_MatrixVP, worldPos);return output; }float4 UnlitPassFragment (VertexOutput input) : SV_TARGET {UNITY_SETUP_INSTANCE_ID(input);return UNITY_ACCESS_INSTANCED_PROP(PerInstance, _Color); }

所有物體最終在一個draw call中完成來繪制,即便它們都使用不同的顏色。但是,在常量緩沖區中可以放入多少數據是有限制的。GPU實例化批處理的限制取決于每個實例的數據變化量,除此之外,緩沖區的最大值因平臺而異。當然仍然只能在使用相同的網格和材質球的情況下才是實現GPU實例化批處理。例如,當同時使用立方體和球體網格時,會分批次。

至此,我們有一個最簡單的著色器,并且能夠盡可能高效地繪制多個對象。接下來,我們將在此基礎上構建更高級的著色器。

還有一點要說明一下,所有常量緩沖的命名都是自定義的,只需要定義和引用保持一致就像行。

下一章我們實現光照。

本章教程項目倉庫

總結

以上是生活随笔為你收集整理的unity烘培单个物体_Unity可编程渲染管线(SRP)教程:二、自定义着色器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

黄色91免费观看 | 久草亚洲视频 | 91资源在线视频 | 国产精品区免费视频 | 日韩激情中文字幕 | 国产成在线观看免费视频 | 五月天久久综合 | 久久精品日韩 | 久久成人资源 | 成人av电影免费在线播放 | 在线导航av | 久久免费精彩视频 | 黄色亚洲在线 | 99精品国产兔费观看久久99 | 十八岁以下禁止观看的1000个网站 | 国产正在播放 | 亚洲伦理一区 | 国产精品视频永久免费播放 | 色网站黄| 国产网站av | 亚洲欧美在线观看视频 | 91桃色国产在线播放 | 一区国产精品 | 精品亚洲成a人在线观看 | 91av在线电影 | 91在线免费公开视频 | 揉bbb玩bbb少妇bbb | www.夜色.com| 欧美日本一二三 | 日本精品中文字幕 | 日韩午夜在线观看 | 成人黄色短片 | 亚洲精品大片www | 91x色 | 国产成人精品久久亚洲高清不卡 | www.色五月.com| 久久精品官网 | www.天天草| 免费成人av| 国产精品video爽爽爽爽 | 久久一区国产 | 在线视频99| 久久五月网| 91最新在线观看 | 婷婷 中文字幕 | 亚洲精品国产综合99久久夜夜嗨 | 伊人开心激情 | 99精品在线播放 | 波多野结衣一区三区 | 久久在线观看 | 中文一区在线观看 | 国产偷在线| 99re国产 | 国产高清在线观看av | 国产自在线 | 91在线视频免费播放 | 午夜av一区二区三区 | 日韩免费在线观看视频 | 久久久久久电影 | 欧美日性视频 | www.久久精品视频 | 国产视频在 | 国产亚洲一级高清 | 午夜久久久久久久久久久 | 成人久久综合 | 91精品国产91久久久久久三级 | 永久黄网站色视频免费观看w | 美女久久一区 | 亚洲黄色av网址 | 国产专区在线 | 国产中文字幕一区二区三区 | 97色婷婷成人综合在线观看 | 99热在线精品观看 | 黄视频网站大全 | 国产精品一区二区在线看 | 高清av在线免费观看 | 午夜精品一区二区三区在线播放 | 亚洲精品成人免费 | www日韩在线观看 | 精品国产1区2区3区 国产欧美精品在线观看 | 久久久久久久久久久黄色 | 在线视频观看成人 | 91人人射| 国产精品国产三级国产aⅴ9色 | 蜜臀av在线一区二区三区 | 怡红院av| 黄色软件在线看 | 天天久久夜夜 | 亚洲欧美在线观看视频 | 久久精品亚洲精品国产欧美 | 久久精品国产精品亚洲 | 五月婷婷,六月丁香 | 99久久精品国产观看 | 免费视频国产 | 丰满少妇高潮在线观看 | 狠狠色丁香婷婷综合欧美 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 97超碰影视| 久久久九色精品国产一区二区三区 | 不卡精品视频 | 婷婷色视频 | 又黄又爽又刺激视频 | 9在线观看免费高清完整版 玖玖爱免费视频 | 欧美日本在线视频 | 综合精品久久 | 亚洲国产精品激情在线观看 | 国产资源免费 | 免费看的黄网站软件 | 久久 精品一区 | 国产午夜三级一区二区三桃花影视 | 色姑娘综合 | 91在线porny国产在线看 | 日韩一区二区三免费高清在线观看 | 久久精品国产免费观看 | 亚洲国产激情 | 人人爽久久涩噜噜噜网站 | 亚洲成人黄色 | 精品久久国产 | 国语久久 | 久久综合狠狠综合久久狠狠色综合 | 深夜福利视频一区二区 | 欧美一级在线看 | 在线免费黄 | 粉嫩aⅴ一区二区三区 | 天天操天天干天天综合网 | 懂色av一区二区三区蜜臀 | 免费看黄在线 | 色婷婷狠| 国产精品亚州 | 日韩欧美国产视频 | 亚洲 中文 欧美 日韩vr 在线 | 国产精品一区二区白浆 | 久久综合狠狠综合久久狠狠色综合 | 97视频人人免费看 | www.亚洲| 最近中文字幕在线中文高清版 | 在线影视 一区 二区 三区 | 日韩毛片在线一区二区毛片 | 激情视频一区二区三区 | 欧美成人播放 | 国产美女久久久 | 国产片免费在线观看视频 | 精品一区二三区 | 精品一区二区免费视频 | 91精品1区2区 | 色中色资源站 | 亚洲午夜剧场 | 国内三级在线观看 | 三级视频片 | 日本久热| www免费网站在线观看 | 亚洲国产美女久久久久 | 国产色a在线观看 | 最近2019中文免费高清视频观看www99 | 一级一片免费观看 | 韩国在线一区二区 | 一级久久精品 | 国产精品福利小视频 | 欧美99热 | 99精品福利视频 | 久久久www成人免费毛片麻豆 | 久久精品香蕉 | 亚洲三级网 | 久99久在线视频 | 成人精品视频 | 在线观看不卡视频 | 国产99在线播放 | 91视频链接 | 免费av成人在线 | 国产真实在线 | 久久久久久久综合色一本 | 五月天婷亚洲天综合网鲁鲁鲁 | 狠狠操91| 成人黄色中文字幕 | 一区二区三区中文字幕在线 | 国产一二区视频 | 国产在线2020| 四虎成人免费观看 | av片中文 | 国产黄色一级大片 | 久久精品福利 | 一级片视频在线 | 日韩在线视 | 国产r级在线观看 | 国产中文字幕大全 | 国产美女免费视频 | 日韩午夜视频在线观看 | 热99在线视频 | 91xav| 欧美性黄网官网 | 国产精品久久网站 | 日韩在线观看免费 | 日韩av免费在线看 | 在线看片日韩 | 亚洲丝袜一区二区 | 99久久精品国产网站 | 91亚洲精品国偷拍自产在线观看 | 亚洲久草在线视频 | 日本最大色倩网站www | 欧美一级片免费播放 | 精品久久久久久国产 | 久久999久久 | 欧美久久久久久久久久久久久 | 国产精品久久久久久五月尺 | 亚洲精品日韩一区二区电影 | 国产精品久久久久三级 | 福利网址在线观看 | 99在线免费视频 | 久久免费高清 | 国内外成人在线视频 | 999亚洲国产996395| 日韩精品一区二区三区不卡 | av色综合网 | 欧美一级片在线观看视频 | 国产精品久久久久久久久久久免费 | 婷婷五月色综合 | 久久久久久中文字幕 | 国产亚洲成人精品 | 麻豆视频一区二区 | 五月天色综合 | 国产探花在线看 | 插久久| 亚洲日日夜夜 | 区一区二区三区中文字幕 | 日韩欧美一区二区三区在线 | 黄污污网站 | 麻豆成人小视频 | 又黄又色又爽 | 麻豆视频免费看 | 成人毛片100免费观看 | 久草在线在线视频 | 亚洲欧美成人在线 | 五月婷婷狠狠 | 伊人狠狠色 | 中文国产字幕在线观看 | 亚洲黄在线观看 | 在线观看香蕉视频 | 久久久久久久久久影院 | 色五婷婷 | 日韩在线视频免费观看 | 天天做日日做天天爽视频免费 | 园产精品久久久久久久7电影 | 国产成人av一区二区三区在线观看 | 青青河边草免费观看 | 亚洲成人中文在线 | 99久久精品一区二区成人 | 99免费| 色久天| 久久久国产视频 | 日韩一区二区三免费高清在线观看 | 日韩黄色免费电影 | 少妇av片| 福利视频午夜 | 制服丝袜亚洲 | 久久精品毛片基地 | 国产精品 999 | 午夜精品一区二区三区视频免费看 | 人人爽人人做 | 亚洲精品永久免费视频 | 欧美午夜精品久久久久久浪潮 | 国产精品一区二区三区四区在线观看 | 欧美另类z0zx | 粉嫩一区二区三区粉嫩91 | 免费色视频网址 | 久久国产片 | 亚洲永久精品一区 | 岛国大片免费视频 | 亚洲狠狠婷婷综合久久久 | 国产午夜精品福利视频 | 国产美女久久久 | 碰超在线97人人 | 亚洲一级片免费观看 | 欧美久久久 | 最新免费av在线 | 天天操天天干天天操天天干 | 精品黄色在线 | 99久免费精品视频在线观看 | a一片一级 | 经典三级一区 | 国产精品久久久久久久久久99 | 精品一区三区 | 九九免费在线观看视频 | 精品欧美乱码久久久久久 | 黄色精品网站 | 狠狠躁夜夜躁人人爽超碰91 | 国内成人综合 | 成人黄色在线观看视频 | 久久中文欧美 | 日韩一区正在播放 | 国内视频在线 | а天堂中文最新一区二区三区 | 色婷婷伊人 | 久久美女视频 | 在线免费高清一区二区三区 | 在线91色 | 又色又爽又黄 | 中文av在线天堂 | 亚洲亚洲精品在线观看 | 综合影视 | 九九九热精品免费视频观看网站 | 97超碰国产精品 | 国产成人一区二区三区在线观看 | 国产精品久久久久久超碰 | 国产三级精品在线 | 精品少妇一区二区三区在线 | 99久久久久久久 | 在线观看黄色小视频 | 欧美激情第十页 | 香蕉网在线 | 玖玖视频网| 97国产在线视频 | 91视频在线播放视频 | 91视频久久久 | 青青草国产精品视频 | 久久久三级视频 | 最新色站 | 国内精品久久久久影院日本资源 | 亚洲三级黄色 | 97手机电影网| 日本精品久久 | 国产亚洲精品v | 亚洲欧美一区二区三区孕妇写真 | 丁香久久综合 | 免费美女久久99 | 中文字幕乱码视频 | 一区二区三区精品在线视频 | 91高清完整版在线观看 | av中文国产 | 久久国产精品99精国产 | 91丨porny丨九色 | 激情欧美xxxx | 在线 欧美 日韩 | 精品九九九 | 91视频链接 | 国产一区在线不卡 | 欧美一级性生活片 | 国产一区二区高清不卡 | 99高清视频有精品视频 | 天天爱天天插 | 日韩激情精品 | 国产精品国产三级国产不产一地 | 国产精品一区二区麻豆 | 91成人亚洲 | 久久露脸国产精品 | 欧美不卡视频在线 | 88av色 | 久久色亚洲 | 成人h视频 | 国产视频观看 | 久久久久久久网站 | 日本精品一区二区三区在线播放视频 | 日韩av在线网站 | 久久艹中文字幕 | 精品xxx | 日韩毛片在线免费观看 | 四虎www.| 色综合天天天天做夜夜夜夜做 | 欧美午夜剧场 | 欧美大片www | 日本mv大片欧洲mv大片 | 狠狠色丁香婷婷综合橹88 | 午夜三级影院 | 国产精品一区二区久久精品爱涩 | 青青草国产成人99久久 | 国产精品亚洲人在线观看 | 亚洲闷骚少妇在线观看网站 | 91成人精品一区在线播放69 | 蜜桃视频在线观看一区 | 亚洲国产精品小视频 | 欧美a视频 | 日日夜夜网站 | 亚洲精品成人av在线 | 日韩理论电影网 | 欧美激情综合色 | 在线视频91 | 日韩成人在线一区二区 | 国产精品毛片一区视频播 | 久久夜靖品 | 玖玖玖精品 | 2022久久国产露脸精品国产 | 国产精品二区三区 | 四川bbb搡bbb爽爽视频 | 欧美成人猛片 | 超碰在线观看99 | 欧美va天堂在线电影 | 狠狠狠狠狠狠天天爱 | 91在线在线观看 | 色av色av色av| 精品一区在线看 | 国产一卡二卡在线 | 香蕉视频国产在线观看 | aa级黄色大片 | 91久久国产综合精品女同国语 | 亚洲视频电影在线 | 免费日韩 精品中文字幕视频在线 | 国产精品网红福利 | 欧美大片第1页 | 婷婷国产精品 | 久草久草在线 | 亚洲免费永久精品国产 | 亚洲成人精品av | 国产视频一区在线免费观看 | 在线观看日韩国产 | 视频一区二区精品 | 婷婷五月色综合 | www.色婷婷.com | 美女亚洲精品 | www.干| 精品国产一二三四区 | 亚洲精品在线观看av | 九九热在线精品视频 | 中文字幕在线国产精品 | 精品在线观看国产 | 亚洲视频精品 | 精品一区二区亚洲 | 香蕉手机在线 | 夜夜夜| 免费看一及片 | 97精品久久| 欧美一区二区在线刺激视频 | 欧美日韩视频在线 | 天天狠狠干| 日韩网站在线免费观看 | 婷婷在线网站 | 97av视频在线观看 | 亚洲日本va午夜在线电影 | 国产午夜精品免费一区二区三区视频 | 91一区在线观看 | 日韩免费播放 | 99精品视频一区 | 欧美一二在线 | 一区二区三区在线视频观看58 | 亚洲jizzjizz日本少妇 | 91成人小视频 | 玖玖爱在线观看 | 中文字幕一区二区三区在线观看 | 色偷偷男人的天堂av | 国产亚洲成av片在线观看 | 亚洲欧洲成人精品av97 | 中文字幕日韩免费视频 | avwww在线观看| 国产成人久久精品77777 | 人人爽久久久噜噜噜电影 | 国产视频综合在线 | 四虎影视8848dvd | 日韩国产精品久久久久久亚洲 | 亚洲精品乱码久久久久久蜜桃欧美 | 视频在线播放国产 | 欧美日韩不卡在线观看 | 久久精品久久精品久久39 | 一级黄毛片 | 三级黄色大片在线观看 | 欧美日韩国产一区二区三区在线观看 | 美女国产免费 | 中文字幕在线播放日韩 | 国产在线自 | 亚洲精品福利在线观看 | 亚洲精品综合一二三区在线观看 | 国产色女 | 狠狠色综合欧美激情 | 欧美性色综合网站 | 国产 日韩 欧美 中文 在线播放 | 五月婷婷狠狠 | 狠狠的干| 欧美一二三四在线 | 久草爱 | 亚洲精品91天天久久人人 | 激情综合色综合久久综合 | 久草精品在线观看 | 日日操天天射 | 91传媒在线看 | 人人狠狠综合久久亚洲 | 九九免费在线观看视频 | 久久九九国产精品 | 色国产精品一区在线观看 | 91av播放| 日韩理论片中文字幕 | 免费激情在线电影 | 99久久99视频只有精品 | 五月婷在线播放 | 免费久久精品视频 | 91重口视频| 亚洲精品乱码 | 亚洲一区免费在线 | 综合激情婷婷 | 最近日本中文字幕 | 国语自产偷拍精品视频偷 | 久久精品视频在线播放 | 国产永久网站 | 欧美伦理一区 | 69精品人人人人 | 久久黄页 | 三级在线视频播放 | www.久热 | 精品影院一区二区久久久 | 在线观看免费观看在线91 | 国产精品专区在线观看 | 中文字幕乱码电影 | 日韩在线视频观看 | 国产在线欧美 | 国产资源中文字幕 | 日本黄色免费电影网站 | 免费在线观看一级片 | 午夜精品一区二区三区在线播放 | 久久久视屏 | 日本中文一级片 | 一级欧美日韩 | 成 人 免费 黄 色 视频 | 一级黄色免费 | 天天弄天天干 | 2021国产精品 | 91麻豆精品91久久久久同性 | 国产精品久久久久久久久久久杏吧 | 国产精品久久久久久久久岛 | 国产精品久久久久久久久久久久久久 | 国产va在线观看免费 | 手机av在线不卡 | 一区二区视频免费在线观看 | 日本视频高清 | 字幕网在线观看 | 婷婷在线播放 | 综合网伊人 | 久久免费精彩视频 | 久久av高清 | 9色在线视频 | 欧美大片mv免费 | 在线观看免费国产小视频 | 在线免费看黄色 | 中文字幕在线观看第二页 | 麻豆首页| 91亚洲国产 | 国产欧美久久久精品影院 | 亚洲在线高清 | 亚洲精品www久久久久久 | 深夜免费小视频 | 欧美日韩亚洲一 | 国产日韩欧美在线观看 | 丁香 久久 综合 | 日韩免费一区 | 99久久久久久久久久 | 国产午夜在线 | 狠狠狠狠狠干 | 欧洲精品亚洲精品 | 国产日女人 | 草免费视频 | 日韩欧美国产视频 | 国产精品成久久久久三级 | 免费看v片 | 深夜福利视频一区二区 | 国产999精品久久久久久麻豆 | 久久99久久99精品免观看粉嫩 | 日韩性色 | 久久久久免费网站 | 久久精品日产第一区二区三区乱码 | 成年人在线免费看视频 | 亚洲精品美女久久久久网站 | 免费看的黄色录像 | 99久在线精品99re8热视频 | 国产不卡在线视频 | 亚洲精品国产精品国自产在线 | 国产美女网站在线观看 | 西西4444www大胆视频 | 日韩色区| 福利在线看片 | 成人免费在线观看av | 97看片吧| 亚洲一级免费电影 | 久久午夜网 | 美女av免费看 | 亚洲天堂网站视频 | 国产亚洲综合精品 | 欧美伦理电影一区二区 | 97视频在线看 | 少妇bbw搡bbbb搡bbb | 国产成人一区二区精品非洲 | www国产在线| 日韩中字在线 | 日日碰狠狠添天天爽超碰97久久 | 中文字幕高清在线 | 亚洲三级av | www.香蕉视频在线观看 | 在线观看视频h | 久久久www | 九九视频免费在线观看 | 久久综合成人 | 伊人色综合久久天天网 | 五月开心色 | 亚洲视频六区 | 久草在线高清视频 | 久草网在线 | 欧美污网站 | 亚洲精品小视频在线观看 | 中国一级片免费看 | 国产黄免费在线观看 | 麻豆91在线观看 | 一级久久久 | 色网站免费在线观看 | 色av男人的天堂免费在线 | 久草在线视频免费资源观看 | 中文字幕丝袜一区二区 | 国产日韩精品一区二区三区在线 | 91在线播| 成人av在线一区二区 | 探花在线观看 | 97香蕉久久国产在线观看 | 91网站在线视频 | 国产精品久久久久免费 | www视频在线免费观看 | 色婷婷婷 | 午夜久久久久久久久久久 | 青草视频在线免费 | 国产一区高清在线 | 日韩动漫免费观看高清完整版在线观看 | 欧美少妇影院 | 夜夜骑天天操 | 国产午夜三级一区二区三桃花影视 | 色婷婷丁香 | 日韩在线观看一区二区三区 | 日韩av一区二区在线影视 | 亚洲一区二区精品视频 | 亚洲欧美国产视频 | 免费69视频 | 国产在线探花 | 欧美日韩在线免费观看视频 | 亚洲 中文 欧美 日韩vr 在线 | 色综合久久久 | 久久国产欧美日韩精品 | 国产精品视频免费看 | av黄色在线| 免费黄色特级片 | 毛片美女网站 | 欧美日韩亚洲在线 | a v在线观看 | 伊人久久精品久久亚洲一区 | 福利一区视频 | 美女视频永久黄网站免费观看国产 | 男女激情网址 | 在线91av| 亚洲综合欧美精品电影 | 国产色视频一区二区三区qq号 | 久久精品久久综合 | 久久久久欧美精品 | 午夜在线日韩 | 99久久久国产精品免费观看 | 欧美日韩三级在线观看 | 久久久久久高清 | 伊人射| 日韩欧美综合在线视频 | 中文字幕日韩国产 | 中文免费 | av手机版| 国产分类视频 | 一二区精品 | 国产午夜精品一区 | 国产美女精品视频 | 日韩va欧美va亚洲va久久 | 激情黄色一级片 | 欧美日韩国产精品一区二区亚洲 | 久久精品女人毛片国产 | a视频免费 | 久在线| 国产亚洲精品久久久久久久久久 | 奇米影视在线99精品 | 久久五月激情 | 国产999精品久久久影片官网 | 日韩精品视频在线免费观看 | 欧美精品在线观看免费 | 色综合天天综合在线视频 | 国产精品毛片久久 | 奇米影视8888在线观看大全免费 | 国产亚洲精品久久19p | 亚洲综合在线一区二区三区 | 国产高清视频在线免费观看 | 日日日操| 夜夜骑天天操 | 久久伊99综合婷婷久久伊 | 日日碰狠狠躁久久躁综合网 | 天天干夜夜操视频 | 国产999精品久久久久久绿帽 | 国产片免费在线观看视频 | 色哟哟国产精品 | 免费观看一级特黄欧美大片 | 成人av在线影视 | 国产一区二区三区网站 | 精品国产免费一区二区三区五区 | 人人草人人草 | 国产成人在线网站 | 91麻豆传媒 | 91自拍视频在线观看 | 欧美日本在线视频 | 免费在线观看国产黄 | 欧美性生活免费看 | 四虎亚洲精品 | 91电影福利 | 国产精品18久久久久久久久久久久 | 激情视频国产 | 操久| 午夜精品久久久久久久久久久久久久 | 在线播放第一页 | 天天射天天操天天 | www.色国产 | 免费三级av| 玖玖玖精品| 麻豆成人小视频 | 亚洲精品www | 久久久私人影院 | 久久久久久久综合色一本 | 国产又粗又长又硬免费视频 | 日本电影黄色 | 又黄又网站 | 日一日干一干 | 在线观看第一页 | av7777777| 久久免费的精品国产v∧ | 97在线视频网站 | 98久久 | 欧美性护士 | 91精品国产99久久久久久红楼 | 久久久久亚洲天堂 | 久久最新视频 | 久久国产精品影视 | 亚洲情感电影大片 | 91丨九色丨丝袜 | 又黄又爽又湿又无遮挡的在线视频 | 精品国产片 | 丁香色婷 | 精品在线免费观看 | 天天操天天玩 | 久久精品精品电影网 | 亚洲成人一区 | 狠狠色噜噜狠狠狠 | 日本中文字幕高清 | 久久久人人人 | 少妇性bbb搡bbb爽爽爽欧美 | 欧美成人精品三级在线观看播放 | 91精品网站在线观看 | 久久在线免费观看 | 91精品国自产在线 | 日韩中文在线视频 | 夜夜躁日日躁狠狠躁 | 国产精品一区久久久久 | 激情图片qvod | 久久香蕉国产精品麻豆粉嫩av | 亚洲a成人v| 亚洲激情电影在线 | www.com久久久 | 国产网红在线观看 | 成人app在线播放 | 99视频在线观看免费 | 开心色婷婷| 日韩欧美一区二区三区在线 | 欧美另类色图 | av福利在线导航 | 91手机在线看片 | 超碰大片| 日本黄色大片儿 | 美女网站在线看 | 日韩一区二区三区在线观看 | 黄色aaa级片 | 日日夜夜操操操操 | 国产手机免费视频 | 亚洲天堂社区 | 中文字幕在线国产 | 久久与婷婷 | 成在线播放 | 国产精品久久久久久五月尺 | 日韩免费在线 | 日韩电影一区二区三区 | 日本乱码在线 | 一级欧美日韩 | 伊人五月天av | 久久九九影院 | 亚洲精品美女在线 | 欧美日韩视频在线观看免费 | 国产美女主播精品一区二区三区 | 91免费高清观看 | 亚洲免费在线视频 | 日韩久久精品 | 韩国av免费在线观看 | 一区三区视频在线观看 | 国产精品亚州 | 黄网站app在线观看免费视频 | 久久国产精品久久精品国产演员表 | 免费a视频 | 国产精品久久久久一区二区三区共 | 97av在线视频免费播放 | 亚洲天天在线日亚洲洲精 | 久久国产一区 | 久久综合狠狠综合 | 狠狠操电影网 | 中文字幕免费高清在线观看 | 成人永久在线 | 国产护士av | 国产亚洲精品久久网站 | 黄色免费在线视频 | 日韩av影视 | av网站免费看 | 国内精品久久久久久久影视简单 | 丁香婷婷深情五月亚洲 | 久久久久久蜜桃一区二区 | 国产视频一区在线 | 麻豆影视网 | 国产乱码精品一区二区蜜臀 | 美女视频黄免费 | 国产在线色视频 | 99久久99久久综合 | 91久久人澡人人添人人爽欧美 | 一级久久精品 | 久久国语 | 三级黄色免费 | 久久久久久国产精品美女 | 久久久 激情 | 国内视频一区二区 | 欧美中文字幕久久 | 日产av在线播放 | 中文字幕韩在线第一页 | 久久国产精品99精国产 | 在线观av| 成人h电影| 97成人精品 | 在线观看国产日韩欧美 | 六月丁香六月婷婷 | 五月婷婷丁香在线观看 | 在线观看中文字幕一区二区 | 日韩三级视频在线看 | 亚洲另类交 | 色姑娘综合| 亚洲涩涩涩| 精品久久国产精品 | 99精品黄色片免费大全 | 免费人成网 | 欧美日韩午夜 | 黄色av电影免费观看 | 91最新在线视频 | 国产精品欧美久久 | 在线免费观看视频 | 日本在线视频网址 | 免费久久精品视频 | 国产一级在线 | 天堂av在线网 | 91久久人澡人人添人人爽欧美 | 丁香花中文在线免费观看 | 人人狠 | 成人avav | 精品久久美女 | 青青啪 | 欧美日韩国内在线 | 成人久久18免费网站 | 久久久影院一区二区三区 | 91精品久久香蕉国产线看观看 | 精品产品国产在线不卡 | 香蕉视频在线免费 | 天天操 夜夜操 | 99精品国产一区二区三区麻豆 | 久久精品视频网 | 成人免费观看网站 | 黄色小说视频在线 | 蜜臀av性久久久久蜜臀av | 成人在线电影观看 | 亚洲视频资源在线 | 中文字幕av一区二区三区四区 | 久久综合久久综合久久综合 | 91视频久久久久久 | 一区二区三区视频网站 | 日韩videos | www99久久| 91大神免费在线观看 | 视频三区在线 | 国产精品久久视频 | 日韩视频在线不卡 | 国产成视频在线观看 | 午夜精品久久久久久久久久久久久久 | 午夜精品麻豆 | 国产五月 | 久久精品欧美日韩精品 | 一区二区三区在线播放 | 中国一级片视频 | 国产91精品在线观看 | 亚洲视频一| 亚洲黄色大片 | 波多野结衣在线观看视频 | 午夜10000 | 玖玖在线视频观看 | 人人精久 | 国产男男gay做爰 | 91精品视频网站 | 国产免码va在线观看免费 | 国产精品不卡在线播放 | 亚洲欧美偷拍另类 | 午夜视频色 | 久草在线这里只有精品 | 国产成人99av超碰超爽 | 亚洲精品国精品久久99热 | 中文字幕一二三区 | av在线电影免费观看 | 韩国一区二区av | 亚洲91中文字幕无线码三区 | 久久在线免费观看 | 成人av网站在线观看 | www.色的| 日日骑| 久久精品老司机 | 免费看特级毛片 | 国内一级片在线观看 | 丁香高清视频在线看看 | 久草资源在线观看 | 色婷婷亚洲综合 | 狠狠操电影网 | 久久久久久久久久久福利 | 99超碰在线播放 | 91精品在线免费观看 | 婷婷激情五月综合 | 亚洲国产大片 | 99久久超碰中文字幕伊人 | 久久久穴| 国产精品国产三级国产专区53 | 蜜臀av夜夜澡人人爽人人 | 婷婷去俺也去六月色 | 亚洲在线黄色 | 欧美激情xxxx性bbbb | 亚洲一区二区视频在线 | 美女搞黄国产视频网站 | 亚洲激情中文 | 91黄色免费网站 | 免费看黄色毛片 | 久久人人爽人人爽人人片av免费 | 成年人黄色在线观看 | 欧美日韩在线观看一区 | 黄网在线免费观看 | 色综合天天在线 | 国产精品区在线观看 | 成 人 黄 色 免费播放 | 国产高潮久久 | 婷婷五月色综合 | 91看片一区二区三区 | 国产精品成人久久 | 久久久久久久久久久久久国产精品 | 成年人在线观看免费视频 | 精品99在线观看 | 二区三区精品 | 午夜影院一级 | 免费在线国产精品 | 亚洲1区在线 | 探花国产在线 | 午夜精品一区二区三区免费视频 | 国产这里只有精品 | 欧美九九九| 午夜av电影| 国产精品久久久电影 | 制服丝袜一区二区 | 精品高清美女精品国产区 | 怡红院av| 久久九九影院 | 就要色综合 | 亚洲欧美视频在线播放 | 国产在线精品区 | 国产99久久精品一区二区300 | 狠狠色噜噜狠狠狠狠 | 手机在线看片日韩 | 免费美女av | 91视频亚洲 | 国产精品久久久久久久久久久不卡 | 国产高清不卡av | 中文字幕在线影院 | 亚洲精品资源 | 久色 网| 中文字幕色婷婷在线视频 | 一级片视频在线 | av在线播放免费 | 看片网站黄色 | 色综合激情久久 | 国产亚洲视频在线观看 | 在线高清av| 日韩综合第一页 | 综合伊人av| 蜜桃av久久久亚洲精品 | 亚洲激情电影在线 | 激情综合婷婷 | 五月婷在线播放 | 国产成人久久精品亚洲 | 在线观看国产日韩 | avsex| 91一区啪爱嗯打偷拍欧美 | 久久观看最新视频 | 在线观看中文字幕av | 欧美日韩中文国产一区发布 | av免费观看高清 | 国产精品女同一区二区三区久久夜 | 久久99国产精品免费 | 亚洲dvd | 欧美在线观看视频 | 中文字幕一区二区三区乱码在线 | 麻豆va一区二区三区久久浪 | 国产免费小视频 | 国产免费影院 | 水蜜桃亚洲一二三四在线 | 国产福利精品一区二区 | 四虎成人av |