/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Data/Base/Shaders/Materials/FallbackMaterial.ezShader
131 строка
2 KB
C-Core
Render instance data refactor (#1713)
19 ноя 2025, 20:31
Не верифицирован
19 ноя 2025, 20:31
b8e6103
Код
Авторство
О чём код?
[PLATFORMS] ALL [PERMUTATIONS] BLEND_MODE = BLEND_MODE_OPAQUE RENDER_PASS TOPOLOGY SHADING_MODE = SHADING_MODE_FULLBRIGHT TWO_SIDED = TRUE FLIP_WINDING SHADING_QUALITY CAMERA_MODE MSAA = FALSE [RENDERSTATE] #include <Shaders/Materials/MaterialState.h> [MATERIALCONSTANTS] COLOR4F(BaseColor); [VERTEXSHADER] #if defined(WGSL) && TOPOLOGY == TOPOLOGY_TRIANGLES #define USE_NORMAL #endif #define PASS_THROUGH_INSTANCE_ID #include <Shaders/Materials/MaterialVertexShader.h> VS_OUT main(VS_IN Input) { return FillVertexData(Input); } [GEOMETRYSHADER] #if TOPOLOGY == TOPOLOGY_TRIANGLES struct GS_IN { float4 Position : SV_Position; float3 WorldPos : WORLDPOS; nointerpolation uint3 DataOffsets : DATAOFFSETS; uint InstanceID : SV_InstanceID; }; struct GS_OUT { float4 Position : SV_Position; float3 WorldPos : WORLDPOS; float3 Normal : NORMAL; nointerpolation uint3 DataOffsets : DATAOFFSETS; #if CAMERA_MODE == CAMERA_MODE_STEREO uint RenderTargetArrayIndex : SV_RenderTargetArrayIndex; #endif }; [maxvertexcount(3)] void main( triangle GS_IN input[3], inout TriangleStream<GS_OUT> outputStream ) { float3 edge1 = input[1].WorldPos - input[0].WorldPos; float3 edge2 = input[2].WorldPos - input[0].WorldPos; float3 normal = normalize(cross(edge1, edge2)); GS_OUT output; for (uint i = 0; i < 3; ++i) { output.Position = input[i].Position; output.WorldPos = input[i].WorldPos; output.Normal = normal; output.DataOffsets = input[i].DataOffsets; #if CAMERA_MODE == CAMERA_MODE_STEREO output.RenderTargetArrayIndex = input[i].InstanceID % 2; #endif outputStream.Append(output); } outputStream.RestartStrip(); } #endif [PIXELSHADER] #if TOPOLOGY == TOPOLOGY_TRIANGLES #define USE_NORMAL #endif #include <Shaders/Materials/MaterialPixelShader.h> Texture2D BaseTexture BIND_GROUP(BG_MATERIAL); SamplerState BaseTexture_AutoSampler BIND_GROUP(BG_MATERIAL); float3 GetNormal() { #if TOPOLOGY == TOPOLOGY_TRIANGLES return G.Input.Normal; #else return float3(0.0f, 0.0f, 1.0f); #endif } float3 GetDiffuseColor() { #if TOPOLOGY == TOPOLOGY_TRIANGLES return SampleTexture3Way(BaseTexture, BaseTexture_AutoSampler, G.Input.Normal, G.Input.WorldPosition + 0.5, 1.0).rgb * GetMaterialData(BaseColor).rgb; #else return float3(0.5, 0.5, 0.5) * GetMaterialData(BaseColor).rgb; #endif } float3 GetSpecularColor() { return 0.04f; } float GetRoughness() { return 1.0f; } float GetOpacity() { return 1.0f; }