मुझे समस्या है कि नीचे पिक्सेल शेडर (एचएलएसएल) निर्देशों (नीचे सुझाए गए अनुकूलन के साथ) को संकलित करता है। हालांकि, मैं इसे शेडर मॉडल 2 के साथ उपयोग करना चाहता हूं और इसलिए दुर्भाग्य से मैं केवल निर्देशों का उपयोग कर सकता हूं। क्या कोई भी शेडर के परिणाम को बदले बिना किसी भी संभावित अनुकूलन को देखता है?एचएलएसएल शेडर का अनुकूलन
शेडर आरजीबी से स्क्रीन के एक कम या कम गोलाकार क्षेत्र को सफेद के ढाल में बदलता है -> लाल -> काला कुछ अतिरिक्त चमक आदि के साथ बदलता है।
शेडर कोड है:
// 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);
}
}
आपके सुझावों के लिए धन्यवाद! मैं एचएलएसएल में लुकअप-टेबल कैसे कार्यान्वित करूं - क्या आप मुझे एक उदाहरण दे सकते हैं? उपरोक्त कोड का कौन सा हिस्सा लेर्प निर्देश द्वारा अनुकूलित किया जा सकता है? –
उपर्युक्त उत्तर के हिस्से के रूप में स्पष्टीकरण जोड़ा गया। – Ani
धन्यवाद, लेर्प (अब उपरोक्त शेडर कोड में शामिल) ने एक निर्देश सहेजा जो हमें 68 (69 से) तक ले जाता है। –