Форум программистов, компьютерный форум CyberForum.ru

C++ и RGB. Алгоритм определения цветов для шейдеров. Как сделать шейдер непрозрачным? - C++

Восстановить пароль Регистрация
 
Snysmyrik
 Аватар для Snysmyrik
1 / 1 / 0
Регистрация: 28.06.2012
Сообщений: 37
05.12.2013, 11:32     C++ и RGB. Алгоритм определения цветов для шейдеров. Как сделать шейдер непрозрачным? #1
Всем привет, я сам C++ не знаю вообще мне крайне сложно разобраться в чужом коде, очень надеюсь на помощь!

Насколько я понял, в этом коде реализуются алгоритм определения цветов для шейдеров и, соответственно, ведется расчет для каждой переменной (R,G,B,A), где A - прозрачность. мне необходимо сделать шейдеры непрозрачные, то есть определить A= 1.0. Помогите пожалуйста!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#define SEPARATE_BLOOM 1
 
sampler2D BlurredImage;
 
#if SEPARATE_BLOOM
sampler2D BlurredImageSeperateBloom;
#endif
 
// Tone-mapping parameters.
sampler2D AdaptedLuminance;
float MiddleGrey;
float Lwhite;
 
// Colour adjustment parameters.
float Brightness;
float Contrast;
float Saturation;
float3 DesaturatedColour;
 
#if USE_COLORGRADING
sampler2D ColorGradingLUT;
#endif // USE_COLORGRADING
 
// The per-color weighting to be used for luminance calculations in RGB order.
static const half3 LuminanceVector = float3(0.3, 0.59, 0.11);
 
// Calculate DOF and bloom for the pixel.
float3 ApplyDOFAndBloom(half4 FocusedSceneColorAndDepth, float2 UV)
{
#if SEPARATE_BLOOM
    // Sample DoF colour and blurred foreground circle of confusion.
    half4 DOFColorAndWeight = MAX_SCENE_COLOR * tex2D(BlurredImage,UV);
 
    half UnblurredForegroundCoC = CalcForegroundUnfocusedPercent(FocusedSceneColorAndDepth.a);
    half BlurredForegroundCoC = DOFColorAndWeight.a;
 
    // Combine blurred and unblurred CoC to get max area CoC.
    half ForegroundCoC = saturate(2 * max(UnblurredForegroundCoC, BlurredForegroundCoC) - UnblurredForegroundCoC);
 
    // Combine foreground and background.
    half CoC = max(ForegroundCoC, CalcBackgroundUnfocusedPercent(FocusedSceneColorAndDepth.a));
 
    // Lerp between blurred and unblurred based on CoC.
    half3 Result = lerp(FocusedSceneColorAndDepth.rgb, DOFColorAndWeight.rgb, CoC);
 
    // Add in bloom contribution.
    Result += MAX_SCENE_COLOR * tex2D(BlurredImageSeperateBloom, UV).rgb;
    return Result;
 
#else
 
    half FocusedWeight = saturate(1 - CalcUnfocusedPercent(FocusedSceneColorAndDepth.a));
 
    //Scale color back up as it was compressed to the [0-1] range to fit in the fixed point filter buffer
    half4 UnfocusedSceneColorAndWeight = MAX_SCENE_COLOR * tex2D(BlurredImage, UV);
 
    half  WeightSum = max(FocusedWeight + saturate(UnfocusedSceneColorAndWeight.a), 0.001);
    float3 BloomResult = (FocusedSceneColorAndDepth.rgb * FocusedWeight + UnfocusedSceneColorAndWeight.rgb) / WeightSum;
 
    return BloomResult;
#endif
}
 
// SJT: Perform tone mapping on a pixel.
half3 ToneMap(float3 WorldColour)
{
    half fAdaptedLuminance = tex2D(AdaptedLuminance, float2(0.5f, 0.5f)).r;
    
    half Lworld = dot(WorldColour, LuminanceVector);
    half Exposure = MiddleGrey / (fAdaptedLuminance + 0.001f);
 
    half Ladapted = Lworld * Exposure;
    half Ldisplay = (Ladapted * (1 + Ladapted / (Lwhite * Lwhite))) / (1.0f + Ladapted);
 
    return WorldColour * Ldisplay / (Lworld + 0.0001);
}
 
// SJT: Basic colour adjustment.
half3 ColourAdjust(half3 InColour)
{
    half3 Result = InColour;
 
    // Saturate before we do anything to prevent whackiness from values outside [0,1]
    Result = saturate(Result);
 
    // (De)saturate.
    Result = lerp(dot(Result, LuminanceVector) * DesaturatedColour, Result, Saturation);
 
    // Contrast adjustment (cubic).
    Result = Result - Contrast * (Result - 1) * Result * (Result - 0.5);
 
    // Brightness adjustment (addition).
    Result = Result + Brightness;
 
    return Result;
}
 
void Main(
    in float2 UV : TEXCOORD0,
    in float2 SceneUV : TEXCOORD1,
    out float4 OutColor : COLOR0
    )
{
    half4 FocusedSceneColorAndDepth = CalcSceneColorAndDepth(SceneUV);
 
    // Apply depth of field and bloom.
    float3 DOFBloomResult = ApplyDOFAndBloom(FocusedSceneColorAndDepth, UV);
 
    // SJT: Tone map the HDR colour.
    half3 ToneMappedColour = ToneMap(DOFBloomResult);
 
#if USE_COLORGRADING
    half3 AdjustedColour = ColorLookupTable(ColorGradingLUT, ToneMappedColour);
#else
    // SJT: Perform colour adjustment.
    half3 AdjustedColour = ColourAdjust(ToneMappedColour);
#endif // USE_COLORGRADING
 
    // Gamma correction.
    // DISABLED: This wasn't used when the UI is shown (i.e. most of the time!),
    // and costs a big chunk of time, so I've disabled it.
    //half3 LinearColor = AdjustedColour * GammaColorScale + GammaOverlayColor;
    //OutColor = float4(pow(saturate(LinearColor), GammaInverse), FocusedSceneColorAndDepth.a);
    OutColor = float4(AdjustedColour, FocusedSceneColorAndDepth.a);
    
    
    
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2013, 11:32     C++ и RGB. Алгоритм определения цветов для шейдеров. Как сделать шейдер непрозрачным?
Посмотрите здесь:

Жадный алгоритм для определения последовательности обхода городов. C++
Как сделать разные символы разных цветов [C++] C++
C++ Разработать алгоритм и программу для определения кратчайшего слова в тексте
Разработать алгоритм и программу для определения процента гласных символов в тексте C++
C++ Разработать алгоритм и программу для определения процента слов в тексте, начинающиеся с заданного символа
вывести сообщение если пиксель RGB цвета не попал в диапазон нужных цветов C++
C++ Как сделать текст на консоли двух цветов?
C++ Разработать алгоритм и программу для определения процента гласных символов в тексте!

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4837 / 2976 / 367
Регистрация: 10.11.2010
Сообщений: 11,008
Записей в блоге: 10
Завершенные тесты: 1
05.12.2013, 12:01     C++ и RGB. Алгоритм определения цветов для шейдеров. Как сделать шейдер непрозрачным? #2
Ну и при чем тут C++ ?
Yandex
Объявления
05.12.2013, 12:01     C++ и RGB. Алгоритм определения цветов для шейдеров. Как сделать шейдер непрозрачным?
Ответ Создать тему
Опции темы

Текущее время: 10:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru