bloak
This commit is contained in:
58
Assets/Blocks/Shaders/BlockBreak.shader
Normal file
58
Assets/Blocks/Shaders/BlockBreak.shader
Normal file
@@ -0,0 +1,58 @@
|
||||
Shader "Blocks/BlockBreak"
|
||||
{
|
||||
// Оверлей анимации разрушения блока.
|
||||
// Рендерится поверх чанкового меша отдельным объектом 1x1x1.
|
||||
Properties
|
||||
{
|
||||
_Progress ("Break Progress", Range(0,1)) = 0
|
||||
_CrackTex ("Crack Texture", 2D) = "black" {}
|
||||
_Color ("Tint", Color) = (0,0,0,1)
|
||||
}
|
||||
|
||||
SubShader
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"Queue" = "Transparent+1"
|
||||
"RenderType" = "Transparent"
|
||||
"IgnoreProjector" = "True"
|
||||
}
|
||||
|
||||
ZWrite Off
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
Offset -1, -1 // рисуем чуть поверх, без z-fighting
|
||||
|
||||
Pass
|
||||
{
|
||||
CGPROGRAM
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
#include "UnityCG.cginc"
|
||||
|
||||
sampler2D _CrackTex;
|
||||
float4 _CrackTex_ST;
|
||||
float _Progress;
|
||||
fixed4 _Color;
|
||||
|
||||
struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; };
|
||||
struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; };
|
||||
|
||||
v2f vert(appdata v)
|
||||
{
|
||||
v2f o;
|
||||
o.pos = UnityObjectToClipPos(v.vertex);
|
||||
o.uv = TRANSFORM_TEX(v.uv, _CrackTex);
|
||||
return o;
|
||||
}
|
||||
|
||||
fixed4 frag(v2f i) : SV_Target
|
||||
{
|
||||
fixed4 crack = tex2D(_CrackTex, i.uv);
|
||||
// crack.r — интенсивность трещины; накладывается по прогрессу
|
||||
float alpha = crack.r * _Progress;
|
||||
return fixed4(_Color.rgb, alpha);
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
}
|
||||
9
Assets/Blocks/Shaders/BlockBreak.shader.meta
Normal file
9
Assets/Blocks/Shaders/BlockBreak.shader.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cb42248eaf3ad004dab200504cb05d47
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
55
Assets/Blocks/Shaders/VoxelLit.shader
Normal file
55
Assets/Blocks/Shaders/VoxelLit.shader
Normal file
@@ -0,0 +1,55 @@
|
||||
Shader "Blocks/VoxelLit"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
_MainTexArray ("Texture Array", 2DArray) = "" {}
|
||||
_Glossiness ("Smoothness", Range(0,1)) = 0.0
|
||||
_Metallic ("Metallic", Range(0,1)) = 0.0
|
||||
}
|
||||
|
||||
SubShader
|
||||
{
|
||||
Tags { "RenderType"="Opaque" }
|
||||
LOD 200
|
||||
|
||||
CGPROGRAM
|
||||
// Standard surface shader с кастомным vertex для передачи texIndex
|
||||
#pragma surface surf Standard fullforwardshadows vertex:vert
|
||||
#pragma target 3.5
|
||||
#pragma require 2darray
|
||||
|
||||
UNITY_DECLARE_TEX2DARRAY(_MainTexArray);
|
||||
|
||||
struct Input
|
||||
{
|
||||
float2 uv_MainTexArray; // стандартный UV (0-1 по грани)
|
||||
float texIndex; // индекс слоя в Texture2DArray
|
||||
};
|
||||
|
||||
half _Glossiness;
|
||||
half _Metallic;
|
||||
|
||||
// Vertex-функция: читаем texIndex из канала UV1 (mesh.uv2)
|
||||
void vert(inout appdata_full v, out Input o)
|
||||
{
|
||||
UNITY_INITIALIZE_OUTPUT(Input, o);
|
||||
o.uv_MainTexArray = v.texcoord.xy;
|
||||
o.texIndex = v.texcoord1.x; // UV1.x = индекс текстуры
|
||||
}
|
||||
|
||||
void surf(Input IN, inout SurfaceOutputStandard o)
|
||||
{
|
||||
fixed4 c = UNITY_SAMPLE_TEX2DARRAY(
|
||||
_MainTexArray,
|
||||
float3(IN.uv_MainTexArray, IN.texIndex)
|
||||
);
|
||||
o.Albedo = c.rgb;
|
||||
o.Metallic = _Metallic;
|
||||
o.Smoothness = _Glossiness;
|
||||
o.Alpha = c.a;
|
||||
}
|
||||
ENDCG
|
||||
}
|
||||
|
||||
FallBack "Diffuse"
|
||||
}
|
||||
9
Assets/Blocks/Shaders/VoxelLit.shader.meta
Normal file
9
Assets/Blocks/Shaders/VoxelLit.shader.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0061d561024e79d49851acdeda5f39c9
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user