HDShadowData CreateShadowData(HDShadowRequest shadowRequest, HDShadowAtlas atlas) { HDShadowData data = new HDShadowData(); var devProj = shadowRequest.deviceProjection; var view = shadowRequest.view; data.proj = new Vector4(devProj.m00, devProj.m11, devProj.m22, devProj.m23); data.pos = shadowRequest.position; data.rot0 = new Vector3(view.m00, view.m01, view.m02); data.rot1 = new Vector3(view.m10, view.m11, view.m12); data.rot2 = new Vector3(view.m20, view.m21, view.m22); data.shadowToWorld = shadowRequest.shadowToWorld; // Compute the scale and offset (between 0 and 1) for the atlas coordinates float rWidth = 1.0f / atlas.width; float rHeight = 1.0f / atlas.height; data.atlasOffset = Vector2.Scale(new Vector2(rWidth, rHeight), new Vector2(shadowRequest.atlasViewport.x, shadowRequest.atlasViewport.y)); data.shadowMapSize = new Vector4(shadowRequest.atlasViewport.width, shadowRequest.atlasViewport.height, 1.0f / shadowRequest.atlasViewport.width, 1.0f / shadowRequest.atlasViewport.height); data.viewBias = shadowRequest.viewBias; data.normalBias = shadowRequest.normalBias; data.flags = shadowRequest.flags; data.edgeTolerance = shadowRequest.edgeTolerance; data.shadowFilterParams0.x = shadowRequest.shadowSoftness; data.shadowFilterParams0.y = HDShadowUtils.Asfloat(shadowRequest.blockerSampleCount); data.shadowFilterParams0.z = HDShadowUtils.Asfloat(shadowRequest.filterSampleCount); data.shadowFilterParams0.w = 0; return(data); }
HDShadowData CreateShadowData(HDShadowRequest shadowRequest, HDShadowAtlas atlas) { HDShadowData data = new HDShadowData(); var devProj = shadowRequest.deviceProjection; var view = shadowRequest.view; data.proj = new Vector4(devProj.m00, devProj.m11, devProj.m22, devProj.m23); data.pos = shadowRequest.position; data.rot0 = new Vector3(view.m00, view.m01, view.m02); data.rot1 = new Vector3(view.m10, view.m11, view.m12); data.rot2 = new Vector3(view.m20, view.m21, view.m22); data.shadowToWorld = shadowRequest.shadowToWorld; data.cacheTranslationDelta = new Vector3(0.0f, 0.0f, 0.0f); // Compute the scale and offset (between 0 and 1) for the atlas coordinates float rWidth = 1.0f / atlas.width; float rHeight = 1.0f / atlas.height; data.atlasOffset = Vector2.Scale(new Vector2(rWidth, rHeight), new Vector2(shadowRequest.atlasViewport.x, shadowRequest.atlasViewport.y)); data.shadowMapSize = new Vector4(shadowRequest.atlasViewport.width, shadowRequest.atlasViewport.height, 1.0f / shadowRequest.atlasViewport.width, 1.0f / shadowRequest.atlasViewport.height); data.viewBias = shadowRequest.viewBias; data.normalBias = shadowRequest.normalBias; data.flags = shadowRequest.flags; data.edgeTolerance = shadowRequest.edgeTolerance; data.shadowFilterParams0.x = shadowRequest.shadowSoftness; data.shadowFilterParams0.y = HDShadowUtils.Asfloat(shadowRequest.blockerSampleCount); data.shadowFilterParams0.z = HDShadowUtils.Asfloat(shadowRequest.filterSampleCount); data.shadowFilterParams0.w = shadowRequest.minFilterSize; var hdAsset = (GraphicsSettings.renderPipelineAsset as HDRenderPipelineAsset); if (hdAsset.currentPlatformRenderPipelineSettings.hdShadowInitParams.shadowQuality == HDShadowQuality.VeryHigh && shadowRequest.lightType == (int)LightType.Directional) { data.shadowFilterParams0.x = shadowRequest.kernelSize; data.shadowFilterParams0.y = shadowRequest.lightAngle; data.shadowFilterParams0.z = shadowRequest.maxDepthBias; } if (atlas.HasBlurredEVSM()) { data.shadowFilterParams0 = shadowRequest.evsmParams; } return(data); }
public static HDShadowData UnPackedShadowDataToShadowData(PackedShadowData data) { HDShadowData outData = default(HDShadowData); outData.rot0 = data.packedData1; outData.edgeTolerance = data.packedData1.w; outData.rot1 = data.packedData2; outData.flags = (int)data.packedData2.w; outData.rot2 = data.packedData3; outData.shadowFilterParams0.x = data.packedData3.w; outData.pos = data.packedData4; outData.shadowFilterParams0.y = data.packedData4.w; outData.proj = data.packedData5; outData.atlasOffset = data.packedData6; outData.shadowFilterParams0.z = data.packedData6.z; outData.shadowFilterParams0.w = data.packedData6.w; outData.zBufferParam = data.packedData7; outData.shadowMapSize = data.packedData8; outData.viewBias = data.packedData9; outData.normalBias = data.packedData10.normalized; outData._padding = data.packedData10.w; outData.shadowToWorld.SetColumn(0, data.packedData11); outData.shadowToWorld.SetColumn(1, data.packedData12); outData.shadowToWorld.SetColumn(2, data.packedData13); outData.shadowToWorld.SetColumn(3, data.packedData14); return(outData); }
public static PackedShadowData ToPackedShadowData(HDShadowData data) { PackedShadowData outData = default(PackedShadowData); outData.packedData1 = data.rot0; outData.packedData1.w = data.edgeTolerance; outData.packedData2 = data.rot1; outData.packedData2.w = (float)data.flags + Epsilon; //防止1,转换为float变成0.999999999998; outData.packedData3 = data.rot2; outData.packedData3.w = data.shadowFilterParams0.x; outData.packedData4 = data.pos; outData.packedData4.w = data.shadowFilterParams0.y; outData.packedData5 = data.proj; outData.packedData6 = data.atlasOffset; outData.packedData6.z = data.shadowFilterParams0.z; outData.packedData6.w = data.shadowFilterParams0.w; outData.packedData7 = data.zBufferParam; outData.packedData8 = data.shadowMapSize; outData.packedData9 = data.viewBias; outData.packedData10 = data.normalBias; outData.packedData10.w = data._padding; outData.packedData11 = data.shadowToWorld.GetColumn(0); outData.packedData12 = data.shadowToWorld.GetColumn(1); outData.packedData13 = data.shadowToWorld.GetColumn(2); outData.packedData14 = data.shadowToWorld.GetColumn(3); return(outData); }