2017年11月11日 星期六

模擬海平面以下的無水效果

這個部份主要是應用了DepthMask的機制,目前我的深度貼是採用ObliqueMatrix的方式,所以深度是只有儲存高度,而不是一般的深度貼圖,至於Render Ocean Depth的Shader則分三種,利用Unity的Replace Shader的機制來處理Opaque、Transparent、Depth Mask三種不同的類型物件,程式碼的概念如下:
Shader "RenderOceanDepth"
{
Properties
{
[HideInInspector]_MainTex("MainTex", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
//負責繪製一般的Opaque深度資料…
}
}
SubShader
{
Tags{
"Queue" = "Transparent"
"RenderType" = "Transparent"
}
LOD 100
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
//負責繪製帶有Alpha物件深度資料…
}
}
SubShader
{
Tags{
"RenderType" = "FilterDepth"
}
LOD 100
Pass
{
//負責繪製深度遮閉物件,深度傳回值皆為零…
}
}
}
視頻除了展示可以繪製水平下以下的地表(不含水),還展示了類似摩西分紅海的模擬,但由於Screen base的Depth資料,在不同的視角還是有破綻…




Dream continues in...

沒有留言:

張貼留言