Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
godot
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
community
godot
Commits
f3dd3c08
Commit
f3dd3c08
authored
Dec 15, 2018
by
Bastiaan Olij
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding option to re-orient our sky
parent
5f32fc82
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
131 additions
and
14 deletions
+131
-14
Environment.xml
doc/classes/Environment.xml
+9
-0
rasterizer_dummy.h
drivers/dummy/rasterizer_dummy.h
+1
-0
rasterizer_scene_gles2.cpp
drivers/gles2/rasterizer_scene_gles2.cpp
+20
-3
rasterizer_scene_gles2.h
drivers/gles2/rasterizer_scene_gles2.h
+3
-1
copy.glsl
drivers/gles2/shaders/copy.glsl
+8
-2
rasterizer_scene_gles3.cpp
drivers/gles3/rasterizer_scene_gles3.cpp
+20
-3
rasterizer_scene_gles3.h
drivers/gles3/rasterizer_scene_gles3.h
+4
-2
copy.glsl
drivers/gles3/shaders/copy.glsl
+8
-2
environment.cpp
scene/resources/environment.cpp
+46
-1
environment.h
scene/resources/environment.h
+7
-0
rasterizer.h
servers/visual/rasterizer.h
+1
-0
visual_server_raster.h
servers/visual/visual_server_raster.h
+1
-0
visual_server_wrap_mt.h
servers/visual/visual_server_wrap_mt.h
+1
-0
visual_server.cpp
servers/visual_server.cpp
+1
-0
visual_server.h
servers/visual_server.h
+1
-0
No files found.
doc/classes/Environment.xml
View file @
f3dd3c08
...
...
@@ -77,6 +77,15 @@
<member
name=
"background_sky_custom_fov"
type=
"float"
setter=
"set_sky_custom_fov"
getter=
"get_sky_custom_fov"
>
[Sky] resource's custom field of view.
</member>
<member
name=
"background_sky_orientation"
type=
"Basis"
setter=
"set_sky_orientation"
getter=
"get_sky_orientation"
>
[Sky] resource's rotation expressed as a [Basis]
</member>
<member
name=
"background_sky_rotation"
type=
"Vector3"
setter=
"set_sky_rotation"
getter=
"get_sky_rotation"
>
[Sky] resource's rotation expressed as euler angles in radians
</member>
<member
name=
"background_sky_rotation_degrees"
type=
"Vector3"
setter=
"set_sky_rotation_degrees"
getter=
"get_sky_rotation_degrees"
>
[Sky] resource's rotation expressed as euler angles in degrees
</member>
<member
name=
"dof_blur_far_amount"
type=
"float"
setter=
"set_dof_blur_far_amount"
getter=
"get_dof_blur_far_amount"
>
Amount of far blur.
</member>
...
...
drivers/dummy/rasterizer_dummy.h
View file @
f3dd3c08
...
...
@@ -56,6 +56,7 @@ public:
void
environment_set_background
(
RID
p_env
,
VS
::
EnvironmentBG
p_bg
)
{}
void
environment_set_sky
(
RID
p_env
,
RID
p_sky
)
{}
void
environment_set_sky_custom_fov
(
RID
p_env
,
float
p_scale
)
{}
void
environment_set_sky_orientation
(
RID
p_env
,
const
Basis
&
p_orientation
)
{}
void
environment_set_bg_color
(
RID
p_env
,
const
Color
&
p_color
)
{}
void
environment_set_bg_energy
(
RID
p_env
,
float
p_energy
)
{}
void
environment_set_canvas_max_layer
(
RID
p_env
,
int
p_max_layer
)
{}
...
...
drivers/gles2/rasterizer_scene_gles2.cpp
View file @
f3dd3c08
...
...
@@ -668,6 +668,13 @@ void RasterizerSceneGLES2::environment_set_sky_custom_fov(RID p_env, float p_sca
env
->
sky_custom_fov
=
p_scale
;
}
void
RasterizerSceneGLES2
::
environment_set_sky_orientation
(
RID
p_env
,
const
Basis
&
p_orientation
)
{
Environment
*
env
=
environment_owner
.
getornull
(
p_env
);
ERR_FAIL_COND
(
!
env
);
env
->
sky_orientation
=
p_orientation
;
}
void
RasterizerSceneGLES2
::
environment_set_bg_color
(
RID
p_env
,
const
Color
&
p_color
)
{
Environment
*
env
=
environment_owner
.
getornull
(
p_env
);
ERR_FAIL_COND
(
!
env
);
...
...
@@ -2283,7 +2290,13 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements,
}
}
else
{
if
(
use_radiance_map
)
{
state
.
scene_shader
.
set_uniform
(
SceneShaderGLES2
::
RADIANCE_INVERSE_XFORM
,
p_view_transform
);
if
(
p_env
)
{
Transform
sky_orientation
(
p_env
->
sky_orientation
,
Vector3
(
0.0
,
0.0
,
0.0
));
state
.
scene_shader
.
set_uniform
(
SceneShaderGLES2
::
RADIANCE_INVERSE_XFORM
,
sky_orientation
.
affine_inverse
()
*
p_view_transform
);
}
else
{
// would be a bit weird if we dont have this...
state
.
scene_shader
.
set_uniform
(
SceneShaderGLES2
::
RADIANCE_INVERSE_XFORM
,
p_view_transform
);
}
}
if
(
p_env
)
{
...
...
@@ -2393,7 +2406,7 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements,
state
.
scene_shader
.
set_conditional
(
SceneShaderGLES2
::
FOG_HEIGHT_ENABLED
,
false
);
}
void
RasterizerSceneGLES2
::
_draw_sky
(
RasterizerStorageGLES2
::
Sky
*
p_sky
,
const
CameraMatrix
&
p_projection
,
const
Transform
&
p_transform
,
bool
p_vflip
,
float
p_custom_fov
,
float
p_energy
)
{
void
RasterizerSceneGLES2
::
_draw_sky
(
RasterizerStorageGLES2
::
Sky
*
p_sky
,
const
CameraMatrix
&
p_projection
,
const
Transform
&
p_transform
,
bool
p_vflip
,
float
p_custom_fov
,
float
p_energy
,
const
Basis
&
p_sky_orientation
)
{
ERR_FAIL_COND
(
!
p_sky
);
RasterizerStorageGLES2
::
Texture
*
tex
=
storage
->
texture_owner
.
getornull
(
p_sky
->
panorama
);
...
...
@@ -2473,6 +2486,10 @@ void RasterizerSceneGLES2::_draw_sky(RasterizerStorageGLES2::Sky *p_sky, const C
storage
->
shaders
.
copy
.
set_conditional
(
CopyShaderGLES2
::
USE_CUSTOM_ALPHA
,
false
);
storage
->
shaders
.
copy
.
bind
();
storage
->
shaders
.
copy
.
set_uniform
(
CopyShaderGLES2
::
MULTIPLIER
,
p_energy
);
// don't know why but I always have problems setting a uniform mat3, so we're using a transform
storage
->
shaders
.
copy
.
set_uniform
(
CopyShaderGLES2
::
SKY_TRANSFORM
,
Transform
(
p_sky_orientation
,
Vector3
(
0.0
,
0.0
,
0.0
)).
affine_inverse
());
if
(
asymmetrical
)
{
// pack the bits we need from our projection matrix
storage
->
shaders
.
copy
.
set_uniform
(
CopyShaderGLES2
::
ASYM_PROJ
,
camera
.
matrix
[
2
][
0
],
camera
.
matrix
[
0
][
0
],
camera
.
matrix
[
2
][
1
],
camera
.
matrix
[
1
][
1
]);
...
...
@@ -2648,7 +2665,7 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const
if
(
env
&&
env
->
bg_mode
==
VS
::
ENV_BG_SKY
&&
(
!
storage
->
frame
.
current_rt
||
!
storage
->
frame
.
current_rt
->
flags
[
RasterizerStorage
::
RENDER_TARGET_TRANSPARENT
]))
{
if
(
sky
&&
sky
->
panorama
.
is_valid
())
{
_draw_sky
(
sky
,
p_cam_projection
,
p_cam_transform
,
false
,
env
->
sky_custom_fov
,
env
->
bg_energy
);
_draw_sky
(
sky
,
p_cam_projection
,
p_cam_transform
,
false
,
env
->
sky_custom_fov
,
env
->
bg_energy
,
env
->
sky_orientation
);
}
}
...
...
drivers/gles2/rasterizer_scene_gles2.h
View file @
f3dd3c08
...
...
@@ -344,6 +344,7 @@ public:
RID
sky
;
float
sky_custom_fov
;
Basis
sky_orientation
;
Color
bg_color
;
float
bg_energy
;
...
...
@@ -403,6 +404,7 @@ public:
virtual
void
environment_set_background
(
RID
p_env
,
VS
::
EnvironmentBG
p_bg
);
virtual
void
environment_set_sky
(
RID
p_env
,
RID
p_sky
);
virtual
void
environment_set_sky_custom_fov
(
RID
p_env
,
float
p_scale
);
virtual
void
environment_set_sky_orientation
(
RID
p_env
,
const
Basis
&
p_orientation
);
virtual
void
environment_set_bg_color
(
RID
p_env
,
const
Color
&
p_color
);
virtual
void
environment_set_bg_energy
(
RID
p_env
,
float
p_energy
);
virtual
void
environment_set_canvas_max_layer
(
RID
p_env
,
int
p_max_layer
);
...
...
@@ -654,7 +656,7 @@ public:
bool
p_alpha_pass
,
bool
p_shadow
);
void
_draw_sky
(
RasterizerStorageGLES2
::
Sky
*
p_sky
,
const
CameraMatrix
&
p_projection
,
const
Transform
&
p_transform
,
bool
p_vflip
,
float
p_custom_fov
,
float
p_energy
);
void
_draw_sky
(
RasterizerStorageGLES2
::
Sky
*
p_sky
,
const
CameraMatrix
&
p_projection
,
const
Transform
&
p_transform
,
bool
p_vflip
,
float
p_custom_fov
,
float
p_energy
,
const
Basis
&
p_sky_orientation
);
_FORCE_INLINE_
bool
_setup_material
(
RasterizerStorageGLES2
::
Material
*
p_material
,
bool
p_reverse_cull
,
bool
p_alpha_pass
,
Size2i
p_skeleton_tex_size
=
Size2i
(
0
,
0
));
_FORCE_INLINE_
void
_setup_geometry
(
RenderList
::
Element
*
p_element
,
RasterizerStorageGLES2
::
Skeleton
*
p_skeleton
);
...
...
drivers/gles2/shaders/copy.glsl
View file @
f3dd3c08
...
...
@@ -92,6 +92,7 @@ uniform float custom_alpha;
#endif
#if defined(USE_PANORAMA) || defined(USE_ASYM_PANO)
uniform
highp
mat4
sky_transform
;
vec4
texturePanorama
(
sampler2D
pano
,
vec3
normal
)
{
...
...
@@ -113,7 +114,12 @@ void main() {
#ifdef USE_PANORAMA
vec4
color
=
texturePanorama
(
source
,
normalize
(
cube_interp
));
vec3
cube_normal
=
normalize
(
cube_interp
);
cube_normal
.
z
=
-
cube_normal
.
z
;
cube_normal
=
mat3
(
sky_transform
)
*
cube_normal
;
cube_normal
.
z
=
-
cube_normal
.
z
;
vec4
color
=
texturePanorama
(
source
,
cube_normal
);
#elif defined(USE_ASYM_PANO)
...
...
@@ -125,7 +131,7 @@ void main() {
cube_normal
.
z
=
-
1000000
.
0
;
cube_normal
.
x
=
(
cube_normal
.
z
*
(
-
uv_interp
.
x
-
asym_proj
.
x
))
/
asym_proj
.
y
;
cube_normal
.
y
=
(
cube_normal
.
z
*
(
-
uv_interp
.
y
-
asym_proj
.
z
))
/
asym_proj
.
a
;
cube_normal
=
mat3
(
pano_transform
)
*
cube_normal
;
cube_normal
=
mat3
(
sky_transform
)
*
mat3
(
pano_transform
)
*
cube_normal
;
cube_normal
.
z
=
-
cube_normal
.
z
;
vec4
color
=
texturePanorama
(
source
,
normalize
(
cube_normal
.
xyz
));
...
...
drivers/gles3/rasterizer_scene_gles3.cpp
View file @
f3dd3c08
...
...
@@ -791,6 +791,14 @@ void RasterizerSceneGLES3::environment_set_sky_custom_fov(RID p_env, float p_sca
env
->
sky_custom_fov
=
p_scale
;
}
void
RasterizerSceneGLES3
::
environment_set_sky_orientation
(
RID
p_env
,
const
Basis
&
p_orientation
)
{
Environment
*
env
=
environment_owner
.
getornull
(
p_env
);
ERR_FAIL_COND
(
!
env
);
env
->
sky_orientation
=
p_orientation
;
}
void
RasterizerSceneGLES3
::
environment_set_bg_color
(
RID
p_env
,
const
Color
&
p_color
)
{
Environment
*
env
=
environment_owner
.
getornull
(
p_env
);
...
...
@@ -2427,7 +2435,7 @@ void RasterizerSceneGLES3::_add_geometry_with_material(RasterizerStorageGLES3::G
}
}
void
RasterizerSceneGLES3
::
_draw_sky
(
RasterizerStorageGLES3
::
Sky
*
p_sky
,
const
CameraMatrix
&
p_projection
,
const
Transform
&
p_transform
,
bool
p_vflip
,
float
p_custom_fov
,
float
p_energy
)
{
void
RasterizerSceneGLES3
::
_draw_sky
(
RasterizerStorageGLES3
::
Sky
*
p_sky
,
const
CameraMatrix
&
p_projection
,
const
Transform
&
p_transform
,
bool
p_vflip
,
float
p_custom_fov
,
float
p_energy
,
const
Basis
&
p_sky_orientation
)
{
ERR_FAIL_COND
(
!
p_sky
);
...
...
@@ -2519,7 +2527,12 @@ void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const C
storage
->
shaders
.
copy
.
set_conditional
(
CopyShaderGLES3
::
USE_PANORAMA
,
!
asymmetrical
);
storage
->
shaders
.
copy
.
set_conditional
(
CopyShaderGLES3
::
USE_MULTIPLIER
,
true
);
storage
->
shaders
.
copy
.
bind
();
storage
->
shaders
.
copy
.
set_uniform
(
CopyShaderGLES3
::
MULTIPLIER
,
p_energy
);
// don't know why but I always have problems setting a uniform mat3, so we're using a transform
storage
->
shaders
.
copy
.
set_uniform
(
CopyShaderGLES3
::
SKY_TRANSFORM
,
Transform
(
p_sky_orientation
,
Vector3
(
0.0
,
0.0
,
0.0
)).
affine_inverse
());
if
(
asymmetrical
)
{
// pack the bits we need from our projection matrix
storage
->
shaders
.
copy
.
set_uniform
(
CopyShaderGLES3
::
ASYM_PROJ
,
camera
.
matrix
[
2
][
0
],
camera
.
matrix
[
0
][
0
],
camera
.
matrix
[
2
][
1
],
camera
.
matrix
[
1
][
1
]);
...
...
@@ -2538,6 +2551,7 @@ void RasterizerSceneGLES3::_draw_sky(RasterizerStorageGLES3::Sky *p_sky, const C
}
void
RasterizerSceneGLES3
::
_setup_environment
(
Environment
*
env
,
const
CameraMatrix
&
p_cam_projection
,
const
Transform
&
p_cam_transform
,
bool
p_no_fog
)
{
Transform
sky_orientation
;
//store camera into ubo
store_camera
(
p_cam_projection
,
state
.
ubo_data
.
projection_matrix
);
...
...
@@ -2578,6 +2592,9 @@ void RasterizerSceneGLES3::_setup_environment(Environment *env, const CameraMatr
state
.
ubo_data
.
bg_color
[
2
]
=
bg_color
.
b
;
state
.
ubo_data
.
bg_color
[
3
]
=
bg_color
.
a
;
//use the inverse of our sky_orientation, we may need to skip this if we're using a reflection probe?
sky_orientation
=
Transform
(
env
->
sky_orientation
,
Vector3
(
0.0
,
0.0
,
0.0
)).
affine_inverse
();
state
.
env_radiance_data
.
ambient_contribution
=
env
->
ambient_sky_contribution
;
state
.
ubo_data
.
ambient_occlusion_affect_light
=
env
->
ssao_light_affect
;
state
.
ubo_data
.
ambient_occlusion_affect_ssao
=
env
->
ssao_ao_channel_affect
;
...
...
@@ -2646,7 +2663,7 @@ void RasterizerSceneGLES3::_setup_environment(Environment *env, const CameraMatr
//fill up environment
store_transform
(
p_cam_transform
,
state
.
env_radiance_data
.
transform
);
store_transform
(
sky_orientation
*
p_cam_transform
,
state
.
env_radiance_data
.
transform
);
glBindBuffer
(
GL_UNIFORM_BUFFER
,
state
.
env_radiance_ubo
);
glBufferSubData
(
GL_UNIFORM_BUFFER
,
0
,
sizeof
(
State
::
EnvironmentRadianceUBO
),
&
state
.
env_radiance_data
);
...
...
@@ -4389,7 +4406,7 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const
*/
if
(
sky
&&
sky
->
panorama
.
is_valid
())
_draw_sky
(
sky
,
p_cam_projection
,
p_cam_transform
,
false
,
env
->
sky_custom_fov
,
env
->
bg_energy
);
_draw_sky
(
sky
,
p_cam_projection
,
p_cam_transform
,
false
,
env
->
sky_custom_fov
,
env
->
bg_energy
,
env
->
sky_orientation
);
}
//_render_list_forward(&alpha_render_list,camera_transform,camera_transform_inverse,camera_projection,false,fragment_lighting,true);
...
...
drivers/gles3/rasterizer_scene_gles3.h
View file @
f3dd3c08
...
...
@@ -114,7 +114,7 @@ public:
TonemapShaderGLES3
tonemap_shader
;
struct
SceneDataUBO
{
//this is a std140 compatible struct. Please read the OpenGL 3.3 Specifica
it
on spec before doing any changes
//this is a std140 compatible struct. Please read the OpenGL 3.3 Specifica
ti
on spec before doing any changes
float
projection_matrix
[
16
];
float
inv_projection_matrix
[
16
];
float
camera_inverse_matrix
[
16
];
...
...
@@ -365,6 +365,7 @@ public:
RID
sky
;
float
sky_custom_fov
;
Basis
sky_orientation
;
Color
bg_color
;
float
bg_energy
;
...
...
@@ -531,6 +532,7 @@ public:
virtual
void
environment_set_background
(
RID
p_env
,
VS
::
EnvironmentBG
p_bg
);
virtual
void
environment_set_sky
(
RID
p_env
,
RID
p_sky
);
virtual
void
environment_set_sky_custom_fov
(
RID
p_env
,
float
p_scale
);
virtual
void
environment_set_sky_orientation
(
RID
p_env
,
const
Basis
&
p_orientation
);
virtual
void
environment_set_bg_color
(
RID
p_env
,
const
Color
&
p_color
);
virtual
void
environment_set_bg_energy
(
RID
p_env
,
float
p_energy
);
virtual
void
environment_set_canvas_max_layer
(
RID
p_env
,
int
p_max_layer
);
...
...
@@ -823,7 +825,7 @@ public:
_FORCE_INLINE_
void
_add_geometry_with_material
(
RasterizerStorageGLES3
::
Geometry
*
p_geometry
,
InstanceBase
*
p_instance
,
RasterizerStorageGLES3
::
GeometryOwner
*
p_owner
,
RasterizerStorageGLES3
::
Material
*
p_material
,
bool
p_depth_pass
,
bool
p_shadow_pass
);
void
_draw_sky
(
RasterizerStorageGLES3
::
Sky
*
p_sky
,
const
CameraMatrix
&
p_projection
,
const
Transform
&
p_transform
,
bool
p_vflip
,
float
p_custom_fov
,
float
p_energy
);
void
_draw_sky
(
RasterizerStorageGLES3
::
Sky
*
p_sky
,
const
CameraMatrix
&
p_projection
,
const
Transform
&
p_transform
,
bool
p_vflip
,
float
p_custom_fov
,
float
p_energy
,
const
Basis
&
p_sky_orientation
);
void
_setup_environment
(
Environment
*
env
,
const
CameraMatrix
&
p_cam_projection
,
const
Transform
&
p_cam_transform
,
bool
p_no_fog
=
false
);
void
_setup_directional_light
(
int
p_index
,
const
Transform
&
p_camera_inverse_transform
,
bool
p_use_shadows
);
...
...
drivers/gles3/shaders/copy.glsl
View file @
f3dd3c08
...
...
@@ -79,6 +79,7 @@ uniform float multiplier;
#endif
#if defined(USE_PANORAMA) || defined(USE_ASYM_PANO)
uniform
highp
mat4
sky_transform
;
vec4
texturePanorama
(
vec3
normal
,
sampler2D
pano
)
{
...
...
@@ -121,7 +122,12 @@ void main() {
#ifdef USE_PANORAMA
vec4
color
=
texturePanorama
(
normalize
(
cube_interp
),
source
);
vec3
cube_normal
=
normalize
(
cube_interp
);
cube_normal
.
z
=
-
cube_normal
.
z
;
cube_normal
=
mat3
(
sky_transform
)
*
cube_normal
;
cube_normal
.
z
=
-
cube_normal
.
z
;
vec4
color
=
texturePanorama
(
cube_normal
,
source
);
#elif defined(USE_ASYM_PANO)
...
...
@@ -133,7 +139,7 @@ void main() {
cube_normal
.
z
=
-
1000000
.
0
;
cube_normal
.
x
=
(
cube_normal
.
z
*
(
-
uv_interp
.
x
-
asym_proj
.
x
))
/
asym_proj
.
y
;
cube_normal
.
y
=
(
cube_normal
.
z
*
(
-
uv_interp
.
y
-
asym_proj
.
z
))
/
asym_proj
.
a
;
cube_normal
=
mat3
(
pano_transform
)
*
cube_normal
;
cube_normal
=
mat3
(
sky_transform
)
*
mat3
(
pano_transform
)
*
cube_normal
;
cube_normal
.
z
=
-
cube_normal
.
z
;
vec4
color
=
texturePanorama
(
normalize
(
cube_normal
.
xyz
),
source
);
...
...
scene/resources/environment.cpp
View file @
f3dd3c08
...
...
@@ -61,6 +61,25 @@ void Environment::set_sky_custom_fov(float p_scale) {
bg_sky_custom_fov
=
p_scale
;
VS
::
get_singleton
()
->
environment_set_sky_custom_fov
(
environment
,
p_scale
);
}
void
Environment
::
set_sky_orientation
(
const
Basis
&
p_orientation
)
{
bg_sky_orientation
=
p_orientation
;
_change_notify
(
"background_sky_rotation"
);
_change_notify
(
"background_sky_rotation_degrees"
);
VS
::
get_singleton
()
->
environment_set_sky_orientation
(
environment
,
bg_sky_orientation
);
}
void
Environment
::
set_sky_rotation
(
const
Vector3
&
p_euler_rad
)
{
bg_sky_orientation
.
set_euler
(
p_euler_rad
);
_change_notify
(
"background_sky_orientation"
);
_change_notify
(
"background_sky_rotation_degrees"
);
VS
::
get_singleton
()
->
environment_set_sky_orientation
(
environment
,
bg_sky_orientation
);
}
void
Environment
::
set_sky_rotation_degrees
(
const
Vector3
&
p_euler_deg
)
{
set_sky_rotation
(
p_euler_deg
*
Math_PI
/
180.0
);
_change_notify
(
"background_sky_rotation"
);
}
void
Environment
::
set_bg_color
(
const
Color
&
p_color
)
{
bg_color
=
p_color
;
...
...
@@ -106,6 +125,22 @@ float Environment::get_sky_custom_fov() const {
return
bg_sky_custom_fov
;
}
Basis
Environment
::
get_sky_orientation
()
const
{
return
bg_sky_orientation
;
}
Vector3
Environment
::
get_sky_rotation
()
const
{
// should we cache this? maybe overkill
return
bg_sky_orientation
.
get_euler
();
}
Vector3
Environment
::
get_sky_rotation_degrees
()
const
{
return
get_sky_rotation
()
*
180.0
/
Math_PI
;
}
Color
Environment
::
get_bg_color
()
const
{
return
bg_color
;
...
...
@@ -268,7 +303,7 @@ Ref<Texture> Environment::get_adjustment_color_correction() const {
void
Environment
::
_validate_property
(
PropertyInfo
&
property
)
const
{
if
(
property
.
name
==
"background_sky"
||
property
.
name
==
"background_sky_custom_fov"
||
property
.
name
==
"ambient_light/sky_contribution"
)
{
if
(
property
.
name
==
"background_sky"
||
property
.
name
==
"background_sky_custom_fov"
||
property
.
name
==
"
background_sky_orientation"
||
property
.
name
==
"
ambient_light/sky_contribution"
)
{
if
(
bg_mode
!=
BG_SKY
&&
bg_mode
!=
BG_COLOR_SKY
)
{
property
.
usage
=
PROPERTY_USAGE_NOEDITOR
|
PROPERTY_USAGE_INTERNAL
;
}
...
...
@@ -875,6 +910,9 @@ void Environment::_bind_methods() {
ClassDB
::
bind_method
(
D_METHOD
(
"set_background"
,
"mode"
),
&
Environment
::
set_background
);
ClassDB
::
bind_method
(
D_METHOD
(
"set_sky"
,
"sky"
),
&
Environment
::
set_sky
);
ClassDB
::
bind_method
(
D_METHOD
(
"set_sky_custom_fov"
,
"scale"
),
&
Environment
::
set_sky_custom_fov
);
ClassDB
::
bind_method
(
D_METHOD
(
"set_sky_orientation"
,
"orientation"
),
&
Environment
::
set_sky_orientation
);
ClassDB
::
bind_method
(
D_METHOD
(
"set_sky_rotation"
,
"euler_radians"
),
&
Environment
::
set_sky_rotation
);
ClassDB
::
bind_method
(
D_METHOD
(
"set_sky_rotation_degrees"
,
"euler_degrees"
),
&
Environment
::
set_sky_rotation_degrees
);
ClassDB
::
bind_method
(
D_METHOD
(
"set_bg_color"
,
"color"
),
&
Environment
::
set_bg_color
);
ClassDB
::
bind_method
(
D_METHOD
(
"set_bg_energy"
,
"energy"
),
&
Environment
::
set_bg_energy
);
ClassDB
::
bind_method
(
D_METHOD
(
"set_canvas_max_layer"
,
"layer"
),
&
Environment
::
set_canvas_max_layer
);
...
...
@@ -885,6 +923,9 @@ void Environment::_bind_methods() {
ClassDB
::
bind_method
(
D_METHOD
(
"get_background"
),
&
Environment
::
get_background
);
ClassDB
::
bind_method
(
D_METHOD
(
"get_sky"
),
&
Environment
::
get_sky
);
ClassDB
::
bind_method
(
D_METHOD
(
"get_sky_custom_fov"
),
&
Environment
::
get_sky_custom_fov
);
ClassDB
::
bind_method
(
D_METHOD
(
"get_sky_orientation"
),
&
Environment
::
get_sky_orientation
);
ClassDB
::
bind_method
(
D_METHOD
(
"get_sky_rotation"
),
&
Environment
::
get_sky_rotation
);
ClassDB
::
bind_method
(
D_METHOD
(
"get_sky_rotation_degrees"
),
&
Environment
::
get_sky_rotation_degrees
);
ClassDB
::
bind_method
(
D_METHOD
(
"get_bg_color"
),
&
Environment
::
get_bg_color
);
ClassDB
::
bind_method
(
D_METHOD
(
"get_bg_energy"
),
&
Environment
::
get_bg_energy
);
ClassDB
::
bind_method
(
D_METHOD
(
"get_canvas_max_layer"
),
&
Environment
::
get_canvas_max_layer
);
...
...
@@ -896,6 +937,9 @@ void Environment::_bind_methods() {
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
INT
,
"background_mode"
,
PROPERTY_HINT_ENUM
,
"Clear Color,Custom Color,Sky,Color+Sky,Canvas,Keep"
),
"set_background"
,
"get_background"
);
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
OBJECT
,
"background_sky"
,
PROPERTY_HINT_RESOURCE_TYPE
,
"Sky"
),
"set_sky"
,
"get_sky"
);
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
REAL
,
"background_sky_custom_fov"
,
PROPERTY_HINT_RANGE
,
"0,180,0.1"
),
"set_sky_custom_fov"
,
"get_sky_custom_fov"
);
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
BASIS
,
"background_sky_orientation"
),
"set_sky_orientation"
,
"get_sky_orientation"
);
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
VECTOR3
,
"background_sky_rotation"
,
PROPERTY_HINT_NONE
,
""
,
PROPERTY_USAGE_EDITOR
),
"set_sky_rotation"
,
"get_sky_rotation"
);
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
VECTOR3
,
"background_sky_rotation_degrees"
,
PROPERTY_HINT_NONE
,
""
,
PROPERTY_USAGE_EDITOR
),
"set_sky_rotation_degrees"
,
"get_sky_rotation_degrees"
);
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
COLOR
,
"background_color"
),
"set_bg_color"
,
"get_bg_color"
);
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
REAL
,
"background_energy"
,
PROPERTY_HINT_RANGE
,
"0,16,0.01"
),
"set_bg_energy"
,
"get_bg_energy"
);
ADD_PROPERTY
(
PropertyInfo
(
Variant
::
INT
,
"background_canvas_max_layer"
,
PROPERTY_HINT_RANGE
,
"-1000,1000,1"
),
"set_canvas_max_layer"
,
"get_canvas_max_layer"
);
...
...
@@ -1226,6 +1270,7 @@ Environment::Environment() {
bg_mode
=
BG_CLEAR_COLOR
;
bg_sky_custom_fov
=
0
;
bg_sky_orientation
=
Basis
();
bg_energy
=
1.0
;
bg_canvas_max_layer
=
0
;
ambient_energy
=
1.0
;
...
...
scene/resources/environment.h
View file @
f3dd3c08
...
...
@@ -91,6 +91,7 @@ private:
BGMode
bg_mode
;
Ref
<
Sky
>
bg_sky
;
float
bg_sky_custom_fov
;
Basis
bg_sky_orientation
;
Color
bg_color
;
float
bg_energy
;
int
bg_canvas_max_layer
;
...
...
@@ -182,6 +183,9 @@ public:
void
set_background
(
BGMode
p_bg
);
void
set_sky
(
const
Ref
<
Sky
>
&
p_sky
);
void
set_sky_custom_fov
(
float
p_scale
);
void
set_sky_orientation
(
const
Basis
&
p_orientation
);
void
set_sky_rotation
(
const
Vector3
&
p_euler_rad
);
void
set_sky_rotation_degrees
(
const
Vector3
&
p_euler_deg
);
void
set_bg_color
(
const
Color
&
p_color
);
void
set_bg_energy
(
float
p_energy
);
void
set_canvas_max_layer
(
int
p_max_layer
);
...
...
@@ -192,6 +196,9 @@ public:
BGMode
get_background
()
const
;
Ref
<
Sky
>
get_sky
()
const
;
float
get_sky_custom_fov
()
const
;
Basis
get_sky_orientation
()
const
;
Vector3
get_sky_rotation
()
const
;
Vector3
get_sky_rotation_degrees
()
const
;
Color
get_bg_color
()
const
;
float
get_bg_energy
()
const
;
int
get_canvas_max_layer
()
const
;
...
...
servers/visual/rasterizer.h
View file @
f3dd3c08
...
...
@@ -55,6 +55,7 @@ public:
virtual
void
environment_set_background
(
RID
p_env
,
VS
::
EnvironmentBG
p_bg
)
=
0
;
virtual
void
environment_set_sky
(
RID
p_env
,
RID
p_sky
)
=
0
;
virtual
void
environment_set_sky_custom_fov
(
RID
p_env
,
float
p_scale
)
=
0
;
virtual
void
environment_set_sky_orientation
(
RID
p_env
,
const
Basis
&
p_orientation
)
=
0
;
virtual
void
environment_set_bg_color
(
RID
p_env
,
const
Color
&
p_color
)
=
0
;
virtual
void
environment_set_bg_energy
(
RID
p_env
,
float
p_energy
)
=
0
;
virtual
void
environment_set_canvas_max_layer
(
RID
p_env
,
int
p_max_layer
)
=
0
;
...
...
servers/visual/visual_server_raster.h
View file @
f3dd3c08
...
...
@@ -495,6 +495,7 @@ public:
BIND2
(
environment_set_background
,
RID
,
EnvironmentBG
)
BIND2
(
environment_set_sky
,
RID
,
RID
)
BIND2
(
environment_set_sky_custom_fov
,
RID
,
float
)
BIND2
(
environment_set_sky_orientation
,
RID
,
const
Basis
&
)
BIND2
(
environment_set_bg_color
,
RID
,
const
Color
&
)
BIND2
(
environment_set_bg_energy
,
RID
,
float
)
BIND2
(
environment_set_canvas_max_layer
,
RID
,
int
)
...
...
servers/visual/visual_server_wrap_mt.h
View file @
f3dd3c08
...
...
@@ -421,6 +421,7 @@ public:
FUNC2
(
environment_set_background
,
RID
,
EnvironmentBG
)
FUNC2
(
environment_set_sky
,
RID
,
RID
)
FUNC2
(
environment_set_sky_custom_fov
,
RID
,
float
)
FUNC2
(
environment_set_sky_orientation
,
RID
,
const
Basis
&
)
FUNC2
(
environment_set_bg_color
,
RID
,
const
Color
&
)
FUNC2
(
environment_set_bg_energy
,
RID
,
float
)
FUNC2
(
environment_set_canvas_max_layer
,
RID
,
int
)
...
...
servers/visual_server.cpp
View file @
f3dd3c08
...
...
@@ -1903,6 +1903,7 @@ void VisualServer::_bind_methods() {
ClassDB
::
bind_method
(
D_METHOD
(
"environment_set_background"
,
"env"
,
"bg"
),
&
VisualServer
::
environment_set_background
);
ClassDB
::
bind_method
(
D_METHOD
(
"environment_set_sky"
,
"env"
,
"sky"
),
&
VisualServer
::
environment_set_sky
);
ClassDB
::
bind_method
(
D_METHOD
(
"environment_set_sky_custom_fov"
,
"env"
,
"scale"
),
&
VisualServer
::
environment_set_sky_custom_fov
);
ClassDB
::
bind_method
(
D_METHOD
(
"environment_set_sky_orientation"
,
"env"
,
"orientation"
),
&
VisualServer
::
environment_set_sky_orientation
);
ClassDB
::
bind_method
(
D_METHOD
(
"environment_set_bg_color"
,
"env"
,
"color"
),
&
VisualServer
::
environment_set_bg_color
);
ClassDB
::
bind_method
(
D_METHOD
(
"environment_set_bg_energy"
,
"env"
,
"energy"
),
&
VisualServer
::
environment_set_bg_energy
);
ClassDB
::
bind_method
(
D_METHOD
(
"environment_set_canvas_max_layer"
,
"env"
,
"max_layer"
),
&
VisualServer
::
environment_set_canvas_max_layer
);
...
...
servers/visual_server.h
View file @
f3dd3c08
...
...
@@ -709,6 +709,7 @@ public:
virtual
void
environment_set_background
(
RID
p_env
,
EnvironmentBG
p_bg
)
=
0
;
virtual
void
environment_set_sky
(
RID
p_env
,
RID
p_sky
)
=
0
;
virtual
void
environment_set_sky_custom_fov
(
RID
p_env
,
float
p_scale
)
=
0
;
virtual
void
environment_set_sky_orientation
(
RID
p_env
,
const
Basis
&
p_orientation
)
=
0
;
virtual
void
environment_set_bg_color
(
RID
p_env
,
const
Color
&
p_color
)
=
0
;
virtual
void
environment_set_bg_energy
(
RID
p_env
,
float
p_energy
)
=
0
;
virtual
void
environment_set_canvas_max_layer
(
RID
p_env
,
int
p_max_layer
)
=
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment