COMMAND ENCODER (Barkar Ivan)
163 subscribers
168 photos
72 videos
17 files
108 links
Cool shading, nice ball moment
Download Telegram
Media is too big
VIEW IN TELEGRAM
чет всегда GBuffer в первом кадре из серии длиннее остальных
raster order group очень сократили этот первый кадр. но хз
да в попу ваш метол и TBDR туда же
This media is not supported in your browser
VIEW IN TELEGRAM
давайте немного Юнити. Первое знакомство с рендер гафом в контексте кастомного SRP.

Этот самый примитивный рендер пасс для геометрии ничего не может сказать, кроме как "прекольно!"
Все изменилось, но стало удобно.
private static BaseRenderFunc<DrawGeometryPassData, RenderGraphContext> _renderFunction;

static MyPass()
{
_renderFunction = RenderFunction;
}
В гудини вспомнили про Контекст обработки изображений, и в будущей версии, решили на все деньги его обновить. Теперь это сабстанс какой-то. Любопытна передача данных симуляции.
🤯1
тогда

cmd.SetGlobalConstantBuffer(lightingPassData.DirectionalLightDataBuffer,"DirectionalLightDataBuffer",0, DirectionalLightData.stride);


в шейдере
 

CBUFFER_START(DirectionalLightDataBuffer)
half4 directionLightColor;
half4 directionLightDirectionaAndMask;
half4 shadowData;
CBUFFER_END
а ну и не забыть у графа перед создание BufferHandle
cs 
directionalLightDataBufferDescriptor.target = GraphicsBuffer.Target.Constant;
итого на сегодня вот такой рендер пайплайн пока
конечно, я забыл про преобразование

m - это VP матрица света


private static Matrix4x4 ConvertMatrix(Matrix4x4 m)
{
if (SystemInfo.usesReversedZBuffer)
{
m.m20 = -m.m20;
m.m21 = -m.m21;
m.m22 = -m.m22;
m.m23 = -m.m23;
}
m.m00 = 0.5f * (m.m00 + m.m30);
m.m01 = 0.5f * (m.m01 + m.m31);
m.m02 = 0.5f * (m.m02 + m.m32);
m.m03 = 0.5f * (m.m03 + m.m33);
m.m10 = 0.5f * (m.m10 + m.m30);
m.m11 = 0.5f * (m.m11 + m.m31);
m.m12 = 0.5f * (m.m12 + m.m32);
m.m13 = 0.5f * (m.m13 + m.m33);
m.m20 = 0.5f * (m.m20 + m.m30);
m.m21 = 0.5f * (m.m21 + m.m31);
m.m22 = 0.5f * (m.m22 + m.m32);
m.m23 = 0.5f * (m.m23 + m.m33);
return m;
}


для каскадов добаавляется оффсет и скейл, но это потом
private static Matrix4x4 ApplyBiasMatrix(Matrix4x4 proj, Matrix4x4 view)
{
if (SystemInfo.usesReversedZBuffer)
{
proj.m20 = -proj.m20;
proj.m21 = -proj.m21;
proj.m22 = -proj.m22;
proj.m23 = -proj.m23;
}

Matrix4x4 worldToShadow = proj * view;

var textureScaleAndBias = Matrix4x4.identity;
textureScaleAndBias.m00 = 0.5f;
textureScaleAndBias.m11 = 0.5f;
textureScaleAndBias.m22 = 0.5f;
textureScaleAndBias.m03 = 0.5f;
textureScaleAndBias.m23 = 0.5f;
textureScaleAndBias.m13 = 0.5f;

return textureScaleAndBias * worldToShadow;
}
да в попу эти тени и Юнити туда же
Media is too big
VIEW IN TELEGRAM
ладно, пока так


half4 MainLightShadowsData; //light strength, shadowBias, normalBias

half4 _MainLightShadowDistanceFade; //max distance, fadeWidth, 0, 0,

half fade = 1.0 - saturate ((distance (IN.positionWS, _WorldSpaceCameraPos.xyz) - _MainLightShadowDistanceFade.x) / _MainLightShadowDistanceFade.y );
shadow = LerpWhiteTo(shadow, MainLightShadowsData.x * fade);
🔥1