Compare commits

..

2 Commits

Author SHA1 Message Date
c179bc95cf miss shader 2023-03-16 12:12:36 +03:00
bddb288586 shadows global switch 2023-03-16 12:11:55 +03:00
8 changed files with 93 additions and 93 deletions

View File

@@ -21,16 +21,14 @@ uniform float z_near;
uniform sampler2D tex_coeff_brdf, tex_noise; uniform sampler2D tex_coeff_brdf, tex_noise;
uniform sampler2D tex_0, tex_1, tex_2, tex_3, tex_4, tex_5, tex_sh; uniform sampler2D tex_0, tex_1, tex_2, tex_3, tex_4, tex_5, tex_sh;
//uniform sampler2DShadow tex_shadow[16]; //uniform sampler2DShadow tex_shadow[16];
#ifdef SHADOWS
uniform vec2 shadow_size; uniform vec2 shadow_size;
uniform sampler2DArrayShadow tex_shadows_cone; uniform sampler2DArrayShadow tex_shadows_cone;
uniform sampler2DArray tex_depths_cone; uniform sampler2DArray tex_depths_cone;
uniform samplerCubeArrayShadow tex_shadows_omni; uniform samplerCubeArrayShadow tex_shadows_omni;
uniform samplerCubeArray tex_depths_omni; uniform samplerCubeArray tex_depths_omni;
uniform bool soft_shadows_enabled = false; uniform bool soft_shadows_enabled = false, shadows_enabled = false;
uniform float soft_shadows_quality = 1.; uniform float soft_shadows_quality = 1.;
uniform int soft_shadows_samples = 16, noise_size = 64; uniform int soft_shadows_samples = 16, noise_size = 64;
#endif
uniform samplerCube tex_env; uniform samplerCube tex_env;
uniform int lights_start, lights_count; uniform int lights_start, lights_count;
uniform vec4 fog_color = vec4(0.5, 0.5, 0.5, 1.); uniform vec4 fog_color = vec4(0.5, 0.5, 0.5, 1.);
@@ -57,7 +55,6 @@ vec4 mapScreenToShadow(in int light_index, in vec3 offset) {
} }
#ifdef SHADOWS
#ifdef SPOT #ifdef SPOT
float getShadowCone(in vec3 uvz, in int layer) { float getShadowCone(in vec3 uvz, in int layer) {
@@ -145,7 +142,6 @@ float rand(vec2 co) {
float e = sin(mod(d, 3.14)) * c; float e = sin(mod(d, 3.14)) * c;
return fract(e) - 0.5; return fract(e) - 0.5;
} }
#endif // SHADOWS
vec4 qgl_lightTexture(int index, vec2 coord, vec4 tex_shift) { vec4 qgl_lightTexture(int index, vec2 coord, vec4 tex_shift) {
coord *= qgl_light_parameter[index].map.scale; coord *= qgl_light_parameter[index].map.scale;
@@ -178,8 +174,7 @@ void calcLight(in int index, in vec3 n, in vec3 v) {
spot *= light_map_pix.a; spot *= light_map_pix.a;
#endif #endif
#ifdef SHADOWS if (shadows_enabled && (int(round(qgl_light_parameter[index].flags)) == 1) && (bitfieldExtract(flags, 3, 1) == 1) && (spot > 1E-4)) {
if (int(round(qgl_light_parameter[index].flags)) == 1 && bitfieldExtract(flags, 3, 1) == 1 && (spot > 1E-4)) {
#ifndef SPOT #ifndef SPOT
vec3 odir = -(view_mat * ldir); vec3 odir = -(view_mat * ldir);
#endif #endif
@@ -266,7 +261,6 @@ void calcLight(in int index, in vec3 n, in vec3 v) {
//shadow += getShadowCone(shp.xyz, layer, vec2(0)); //shadow += getShadowCone(shp.xyz, layer, vec2(0));
} }
#endif // SHADOWS
vec3 dist_decay = vec3(1., ldist, ldist*ldist); vec3 dist_decay = vec3(1., ldist, ldist*ldist);
spot /= dot(qgl_light_parameter[index].decay_intensity.xyz, dist_decay); spot /= dot(qgl_light_parameter[index].decay_intensity.xyz, dist_decay);

View File

@@ -31,6 +31,8 @@
#include <piqt.h> #include <piqt.h>
#include <qad_types.h> #include <qad_types.h>
#define SHADERS_DIR ":"
using namespace QGLEngineShaders; using namespace QGLEngineShaders;
@@ -99,8 +101,6 @@ Renderer::Renderer(QGLView * view_)
shader_defines[srGeometrySolidPass] << "SOLID"; shader_defines[srGeometrySolidPass] << "SOLID";
shader_defines[srLightSpotPass] << "SPOT"; shader_defines[srLightSpotPass] << "SPOT";
shader_defines[srShadowOmniPass] << "OMNI"; shader_defines[srShadowOmniPass] << "OMNI";
shader_defines[srLightSpotPass] << "SHADOWS";
shader_defines[srLightOmniPass] << "SHADOWS";
PICodeInfo::EnumInfo * obre = PICodeInfo::enumsInfo->value("Renderer::DeferredBufferRole"); PICodeInfo::EnumInfo * obre = PICodeInfo::enumsInfo->value("Renderer::DeferredBufferRole");
if (obre) { if (obre) {
@@ -169,7 +169,7 @@ void Renderer::reloadShaders() {
shader_fxaa = nullptr; shader_fxaa = nullptr;
if (tone_proc.shader_sum) delete tone_proc.shader_sum; if (tone_proc.shader_sum) delete tone_proc.shader_sum;
tone_proc.shader_sum = nullptr; tone_proc.shader_sum = nullptr;
QString dir = ":/shaders/"; QString dir = SHADERS_DIR "/shaders/";
while (it.hasNext()) { while (it.hasNext()) {
it.next(); it.next();
loadShadersMulti(shaders[it.key()], dir + it.value(), true, shader_defines.value(it.key()), obr_defines); loadShadersMulti(shaders[it.key()], dir + it.value(), true, shader_defines.value(it.key()), obr_defines);
@@ -354,9 +354,10 @@ void Renderer::renderLight(int first_wr_buff, bool clear_only) {
prog->setUniformValue("fog_decay", qMax(view->fogDecay(), 0.001f)); prog->setUniformValue("fog_decay", qMax(view->fogDecay(), 0.001f));
prog->setUniformValue("fog_density", view->fogDensity()); prog->setUniformValue("fog_density", view->fogDensity());
prog->setUniformValue("view_mat", cam->viewMatrix().inverted().toGenericMatrix<3, 3>()); prog->setUniformValue("view_mat", cam->viewMatrix().inverted().toGenericMatrix<3, 3>());
if (shadows_enabled) {
prog->setUniformValue("shadow_size", view->shadow_map_size);
prog->setUniformValue("noise_size", noise_size); prog->setUniformValue("noise_size", noise_size);
prog->setUniformValue("shadows_enabled", view->shadows());
if (view->shadows()) {
prog->setUniformValue("shadow_size", view->shadow_map_size);
prog->setUniformValue("soft_shadows_enabled", view->soft_shadows); prog->setUniformValue("soft_shadows_enabled", view->soft_shadows);
prog->setUniformValue("soft_shadows_samples", view->soft_shadows_samples); prog->setUniformValue("soft_shadows_samples", view->soft_shadows_samples);
prog->setUniformValue("soft_shadows_quality", view->soft_shadows_quality); prog->setUniformValue("soft_shadows_quality", view->soft_shadows_quality);
@@ -526,7 +527,7 @@ void Renderer::renderScene() {
} }
phase.end(); phase.end();
if (shadows_enabled) { if (view->shadows()) {
/// cone shadows and shadow matrix /// cone shadows and shadow matrix
phase.begin("shadows cone"); phase.begin("shadows cone");
renderConeShadows(); renderConeShadows();
@@ -672,11 +673,12 @@ void Renderer::renderScene() {
fbo_out.release(); fbo_out.release();
/// apply hovers and selection frame /// apply hovers and selection frame
phase.begin("service");
if (edit_mode) { if (edit_mode) {
phase.begin("service");
rend_selection.drawSelection(fbo_out, cur_write_plane); rend_selection.drawSelection(fbo_out, cur_write_plane);
rend_service.renderService(); rend_service.renderService();
} else { } else {
phase.begin("blit to screen");
fbo_out.blit(cur_write_plane, 0, 0, fbo_out.rect(), QRect(QPoint(), view->pixelSize())); fbo_out.blit(cur_write_plane, 0, 0, fbo_out.rect(), QRect(QPoint(), view->pixelSize()));
} }
phase.end(); phase.end();
@@ -735,14 +737,3 @@ void Renderer::addFramebufferEffect(FramebufferEffectBase * e) {
e->r = this; e->r = this;
fb_effects << e; fb_effects << e;
} }
void Renderer::setSadowsEnabled(bool on) {
shader_defines[srLightSpotPass].removeAll("SHADOWS");
shader_defines[srLightOmniPass].removeAll("SHADOWS");
if (on) {
shader_defines[srLightSpotPass] << "SHADOWS";
shader_defines[srLightOmniPass] << "SHADOWS";
}
shadows_enabled = on;
reloadShaders();
}

View File

@@ -110,9 +110,6 @@ public:
QImage materialThumbnail(Material * m) { return rend_mat.materialThumbnail(m); } QImage materialThumbnail(Material * m) { return rend_mat.materialThumbnail(m); }
void recreateMaterialThumbnails(bool force_all = false) { rend_mat.recreateMaterialThumbnails(force_all); } void recreateMaterialThumbnails(bool force_all = false) { rend_mat.recreateMaterialThumbnails(force_all); }
void setSadowsEnabled(bool on);
bool isShadowsEnabled() const { return shadows_enabled; }
protected: protected:
void fillObjectsBuffer(const ObjectBaseList & ol, RenderPass pass); void fillObjectsBuffer(const ObjectBaseList & ol, RenderPass pass);
void renderObjects(Scene & scene, RenderPass pass); void renderObjects(Scene & scene, RenderPass pass);
@@ -160,7 +157,6 @@ private:
QVector<FramebufferEffectBase *> fb_effects; QVector<FramebufferEffectBase *> fb_effects;
QImage last_img; QImage last_img;
QString obr_defines, timings; QString obr_defines, timings;
bool shadows_enabled = true;
bool is_grabbing = false; bool is_grabbing = false;
}; };

View File

@@ -46,6 +46,7 @@ QGLView::QGLView(): OpenGLWindow(), renderer_(this), mouse(this) {
soft_shadows_quality = 1.; soft_shadows_quality = 1.;
soft_shadows_samples = 32; soft_shadows_samples = 32;
soft_shadows = false; soft_shadows = false;
shadows_ = false;
fps_tm = fps_ = 0.; fps_tm = fps_ = 0.;
fogColor_ = Qt::darkGray; fogColor_ = Qt::darkGray;
fogDensity_ = 0.; fogDensity_ = 0.;

View File

@@ -173,6 +173,8 @@ public:
void setSoftShadowsQuality(float s) { soft_shadows_quality = s; } void setSoftShadowsQuality(float s) { soft_shadows_quality = s; }
bool softShadows() const { return soft_shadows; } bool softShadows() const { return soft_shadows; }
void setSoftShadows(bool on) { soft_shadows = on; } void setSoftShadows(bool on) { soft_shadows = on; }
bool shadows() const { return shadows_; }
void setShadows(bool on) { shadows_ = on; }
GLfloat aspect, iaspect; GLfloat aspect, iaspect;
Renderer renderer_; Renderer renderer_;
@@ -218,7 +220,7 @@ private:
bool fogEnabled_, lightEnabled_, FXAA_; bool fogEnabled_, lightEnabled_, FXAA_;
bool shaders_supported, shaders_bind; bool shaders_supported, shaders_bind;
bool hoverHalo_, selectionHalo_; bool hoverHalo_, selectionHalo_;
bool is_init, soft_shadows; bool is_init, shadows_, soft_shadows;
private slots: private slots:
void __destroyed(); void __destroyed();

View File

@@ -64,6 +64,7 @@ void ViewEditor::assignQGLView(QGLView * v) {
ui->colorFogBack->setColor(view->fogColor()); ui->colorFogBack->setColor(view->fogColor());
ui->spinFogDecay->setValue(view->fogDecay()); ui->spinFogDecay->setValue(view->fogDecay());
ui->spinFogDensity->setValue(view->fogDensity()); ui->spinFogDensity->setValue(view->fogDensity());
ui->groupShadows->setChecked(view->shadows());
ui->checkSoftShadows->setChecked(view->softShadows()); ui->checkSoftShadows->setChecked(view->softShadows());
ui->spinSoftShadowSamples->setValue(view->softShadowsSamples()); ui->spinSoftShadowSamples->setValue(view->softShadowsSamples());
ui->spinSoftShadowQuality->setValue(view->softShadowsQuality()); ui->spinSoftShadowQuality->setValue(view->softShadowsQuality());
@@ -115,6 +116,12 @@ void ViewEditor::on_comboViewRenderMode_currentIndexChanged(int val) {
} }
void ViewEditor::on_groupShadows_clicked(bool val) {
if (!view || !active) return;
view->setShadows(val);
}
void ViewEditor::on_groupHalos_clicked(bool val) { void ViewEditor::on_groupHalos_clicked(bool val) {
if (!view || !active) return; if (!view || !active) return;
view->setHoverHaloEnabled(val && ui->checkHoverHalo->isChecked()); view->setHoverHaloEnabled(val && ui->checkHoverHalo->isChecked());

View File

@@ -47,6 +47,7 @@ private slots:
void on_spinDepthStart_valueChanged(double val); void on_spinDepthStart_valueChanged(double val);
void on_spinViewGamma_valueChanged(double val); void on_spinViewGamma_valueChanged(double val);
void on_comboViewRenderMode_currentIndexChanged(int val); void on_comboViewRenderMode_currentIndexChanged(int val);
void on_groupShadows_clicked(bool val);
void on_groupHalos_clicked(bool val); void on_groupHalos_clicked(bool val);
void on_checkHoverHalo_clicked(bool val); void on_checkHoverHalo_clicked(bool val);
void on_checkSelectionHalo_clicked(bool val); void on_checkSelectionHalo_clicked(bool val);

View File

@@ -37,7 +37,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>453</width> <width>453</width>
<height>807</height> <height>885</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@@ -205,31 +205,28 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1">
<widget class="QCheckBox" name="checkSoftShadows">
<property name="text">
<string>Soft shadows</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="groupShadows">
<property name="title">
<string>Shadows</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout_2"> <layout class="QFormLayout" name="formLayout_2">
<property name="labelAlignment"> <property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
<item row="0" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_9"> <widget class="QLabel" name="label_9">
<property name="text"> <property name="text">
<string>Soft shadow samples:</string> <string>Soft shadow samples:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="1" column="1">
<widget class="SpinSlider" name="spinSoftShadowSamples"> <widget class="SpinSlider" name="spinSoftShadowSamples">
<property name="minimum"> <property name="minimum">
<double>1.000000000000000</double> <double>1.000000000000000</double>
@@ -245,14 +242,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_10"> <widget class="QLabel" name="label_10">
<property name="text"> <property name="text">
<string>Soft shadow quality:</string> <string>Soft shadow quality:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="2" column="1">
<widget class="SpinSlider" name="spinSoftShadowQuality"> <widget class="SpinSlider" name="spinSoftShadowQuality">
<property name="minimum"> <property name="minimum">
<double>0.100000000000000</double> <double>0.100000000000000</double>
@@ -268,7 +265,18 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="checkSoftShadows">
<property name="text">
<string>Soft shadows</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout> </layout>
</widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="groupCamera"> <widget class="QGroupBox" name="groupCamera">