Тема: Depth water shader
Показать сообщение отдельно
Старый 04.08.2014, 11:23   #13
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 419
Написано 68 полезных сообщений
(для 100 пользователей)
Ответ: Depth water shader

Получилось извлечь линейную глубину изображения.
Как я понял поверхность дна должна отрисовываться в z-buffer, после чего шейдер воды должен считывать показания z буфера и на основе этого уже определять затемненность воды. Но как сделать чтобы шейдер воды не вносил изменения в z буффер? Вставил ZWrite OFF не работает...

Shader "Render Depth" {
SubShader {
    Tags { "Queue"="Geometry+10" "IgnoreProjector"="True" "RenderType"="Transparent"  }
    Pass {
    
	ZWrite Off
	//Ztest always
	LOD 500
        Fog { Mode Off }
	CGPROGRAM
// Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members worldPos)
#pragma exclude_renderers d3d11 xbox360

	#pragma vertex vert 
	#pragma fragment frag
	#include "UnityCG.cginc"
 

	struct v2f {
	    float4 pos : SV_POSITION;
	    float2 depth : TEXCOORD0;
	};

	v2f vert (appdata_base v) {
	    v2f o;
	    o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
	    UNITY_TRANSFER_DEPTH(o.depth);
	    return o;
	}

	half4 frag(v2f i) : COLOR {	
		float d = i.depth.x/i.depth.y;	//получаем глубину аналогично UNITY_OUTPUT_DEPTH(i.depth);	
		d=Linear01Depth(d);			// Преобразуем в линейное значение
		return half4(d,d,d,0.5);		// Возвращаем цвет
		   	    
	}
			
	ENDCG
    }
}
}
Миниатюры
Нажмите на изображение для увеличения
Название: zcom.PNG
Просмотров: 1266
Размер:	12.8 Кб
ID:	20779  
(Offline)
 
Ответить с цитированием