我有一個問題,下面的像素着色器(HLSL)編譯爲指令(使用下面的建議優化)。但是,我想將它與着色器模型2一起使用,因此不幸的是,我只能使用最多指令。有沒有人看到任何可能的優化而不改變着色器的結果?HLSL着色器的優化
着色器將屏幕(帶有正弦形邊框)的或多或少球形區域從RGB轉換爲白色 - >紅色 - >黑色的漸變,並具有一些額外的亮度等修改。
的shader代碼是:
// Normalized timefactor (1 = fully enabled)
float timeFactor;
// Center of "light"
float x;
float y;
// Size of "light"
float viewsizeQ;
float fadesizeQ;
// Rotational shift
float angleShift;
// Resolution
float screenResolutionWidth;
float screenResolutionHeight;
float screenZoomQTimesX;
// Texture sampler
sampler TextureSampler : register(s0);
float4 method(float2 texCoord : TEXCOORD0) : COLOR0
{
// New color after transformation
float4 newColor;
// Look up the texture color.
float4 color = tex2D(TextureSampler, texCoord);
// Calculate distance
float2 delta = (float2(x, y) - texCoord.xy)
* float2(screenResolutionWidth, screenResolutionHeight);
// Get angle from center
float distQ = dot(delta, delta) - sin((atan2(delta.x, delta.y) + angleShift) * 13) * screenZoomQTimesX;
// Within fadeSize
if (distQ < fadesizeQ)
{
// Make greyscale
float grey = dot(color.rgb, float3(0.3, 0.59, 0.11));
// Increase contrast by applying a color transformation based on a quasi-sigmoid gamma curve
grey = 1/(1 + pow(1.25-grey/2, 16));
// Transform Black/White color range to Black/Red/White color range
// 1 -> 0.5f ... White -> Red
if (grey >= 0.75)
{
newColor.r = 0.7 + 0.3 * color.r;
grey = (grey - 0.75) * 4;
newColor.gb = 0.7 * grey + 0.3 * color.gb;
}
else // 0.5f -> 0 ... Red -> Black
{
newColor.r = 1.5 * 0.7 * grey + 0.3 * color.r;
newColor.gb = 0.3 * color.gb ;
}
// Within viewSize (Full transformation, only blend with timefactor)
if (distQ < viewsizeQ)
{
color.rgb = lerp(newColor.rgb, color.rgb, timeFactor);
}
// Outside viewSize but still in fadeSize (Spatial fade-out but also with timefactor)
else
{
float factor = timeFactor * (1 - (distQ - viewsizeQ)/(fadesizeQ - viewsizeQ));
color.rgb = lerp(newColor.rgb, color.rgb, factor);
}
}
感謝您的建議!我如何在HLSL中實現查找表 - 你能給我一個例子嗎?上述代碼的哪一部分可以通過lerp指令進行優化? –
作爲上述答案的一部分添加了解釋。 – Ani
謝謝,lerp(現在包含在上面的着色器代碼中)保存了一條指令,使我們達到68(從69)。 –