/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #define ENABLE_DEBUG_MODIFY_OUTPUT 0 #if MATERIALPIPELINE_SHADER_HAS_PIXEL_STAGE #define MATERIAL_HAS_UVS 0 struct VsInput { float3 position : POSITION; float3 normal : NORMAL; }; struct VsSystemValues { uint m_instanceId; }; struct VsOutput { precise linear centroid float4 position : SV_Position; float3 normal: NORMAL; float3 worldPosition : UV0; }; VsOutput EvaluateVertexGeometry(VsInput IN, VsSystemValues SV) { VsOutput output; output.worldPosition = LocalSpaceToWorldSpace(IN.position, SV.m_instanceId); output.position = WorldSpaceToClipSpace(output.worldPosition); output.normal = IN.normal; return output; } class PixelGeometryData { float3 positionWS; float3 vertexNormal; }; PixelGeometryData EvaluatePixelGeometry(VsOutput IN, bool isFrontFace) { PixelGeometryData geoData; geoData.positionWS = IN.worldPosition; geoData.vertexNormal = normalize(IN.normal); return geoData; } #include Surface EvaluateSurface(VsOutput IN, PixelGeometryData geoData) { Surface surface; surface.position = geoData.positionWS; surface.vertexNormal = geoData.vertexNormal; surface.normal = geoData.vertexNormal; float3 baseColor = float3(1,1,1); float specularF0Factor = 0.5; float metallic = 1; surface.SetAlbedoAndSpecularF0(baseColor, specularF0Factor, metallic); surface.roughnessLinear = 0; surface.CalculateRoughnessA(); return surface; } #else #include #include #endif