Skip to content

Commit

Permalink
Rt Normals example
Browse files Browse the repository at this point in the history
  • Loading branch information
Mulderua committed Nov 15, 2023
1 parent fbe68bd commit e0f2d0c
Show file tree
Hide file tree
Showing 12 changed files with 139 additions and 22 deletions.
3 changes: 3 additions & 0 deletions .defignore
@@ -0,0 +1,3 @@
/.defold/api
/.idea
/.vscode
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -8,3 +8,5 @@ Thumbs.db
.project
.cproject
builtins

/.defold/api
13 changes: 13 additions & 0 deletions assets/materials/normals.fp
@@ -0,0 +1,13 @@
varying highp vec4 var_position;
varying mediump vec3 var_normal;
varying mediump vec2 var_texcoord0;
varying mediump vec4 var_light;

uniform lowp sampler2D tex0;
uniform lowp vec4 tint;

void main()
{
gl_FragColor = vec4(var_normal.xyz, 1.0);
}

22 changes: 22 additions & 0 deletions assets/materials/normals.material
@@ -0,0 +1,22 @@
name: "model"
tags: "model"
vertex_program: "/builtins/materials/model.vp"
fragment_program: "/assets/materials/normals.fp"
vertex_space: VERTEX_SPACE_LOCAL
vertex_constants {
name: "mtx_worldview"
type: CONSTANT_TYPE_WORLDVIEW
}
vertex_constants {
name: "mtx_view"
type: CONSTANT_TYPE_VIEW
}
vertex_constants {
name: "mtx_proj"
type: CONSTANT_TYPE_PROJECTION
}
vertex_constants {
name: "mtx_normal"
type: CONSTANT_TYPE_NORMAL
}
max_page_count: 0
13 changes: 13 additions & 0 deletions assets/materials/use_normals.fp
@@ -0,0 +1,13 @@
varying mediump vec2 var_texcoord0;


uniform lowp sampler2D tex0;
uniform lowp vec4 uResolution;

void main()
{
vec2 uv = gl_FragCoord.xy/uResolution.xy;
vec4 normal_tex = texture2D(tex0, uv);
gl_FragColor = vec4(normal_tex.xyz, 1.0);
}

50 changes: 50 additions & 0 deletions assets/materials/use_normals.material
@@ -0,0 +1,50 @@
name: "model"
tags: "model"
vertex_program: "/builtins/materials/model.vp"
fragment_program: "/assets/materials/use_normals.fp"
vertex_space: VERTEX_SPACE_LOCAL
vertex_constants {
name: "mtx_worldview"
type: CONSTANT_TYPE_WORLDVIEW
}
vertex_constants {
name: "mtx_view"
type: CONSTANT_TYPE_VIEW
}
vertex_constants {
name: "mtx_proj"
type: CONSTANT_TYPE_PROJECTION
}
vertex_constants {
name: "mtx_normal"
type: CONSTANT_TYPE_NORMAL
}
vertex_constants {
name: "light"
type: CONSTANT_TYPE_USER
value {
x: 1.0
y: 1.0
z: 1.0
w: 1.0
}
}
fragment_constants {
name: "tint"
type: CONSTANT_TYPE_USER
value {
x: 1.0
y: 1.0
z: 1.0
w: 1.0
}
}
samplers {
name: "tex0"
wrap_u: WRAP_MODE_CLAMP_TO_EDGE
wrap_v: WRAP_MODE_CLAMP_TO_EDGE
filter_min: FILTER_MODE_MIN_LINEAR
filter_mag: FILTER_MODE_MAG_LINEAR
max_anisotropy: 1.0
}
max_page_count: 0
2 changes: 1 addition & 1 deletion assets/models/cube.model
@@ -1,5 +1,5 @@
mesh: "/builtins/assets/meshes/cube.dae"
material: "/builtins/materials/model.material"
material: "/assets/materials/use_normals.material"
textures: "/assets/images/green.png"
skeleton: ""
animations: ""
Expand Down
2 changes: 1 addition & 1 deletion assets/models/quad.model
@@ -1,5 +1,5 @@
mesh: "/builtins/assets/meshes/quad.dae"
material: "/builtins/materials/model.material"
material: "/assets/materials/use_normals.material"
textures: "/assets/images/brown.png"
skeleton: ""
animations: ""
Expand Down
2 changes: 1 addition & 1 deletion assets/models/sphere.model
@@ -1,5 +1,5 @@
mesh: "/builtins/assets/meshes/sphere.dae"
material: "/builtins/materials/model.material"
material: "/assets/materials/use_normals.material"
textures: "/assets/images/brown.png"
skeleton: ""
animations: ""
Expand Down
4 changes: 4 additions & 0 deletions main/main.render
@@ -1 +1,5 @@
script: "/main/main.render_script"
materials {
name: "rt_normals"
material: "/assets/materials/normals.material"
}
29 changes: 29 additions & 0 deletions main/main.render_script
Expand Up @@ -53,6 +53,20 @@ function init(self)
self.near = -1
self.far = 1
self.projection_fn = stretch_projection

self.rt_normals = render.render_target("rt_normals",{
[render.BUFFER_COLOR_BIT] = {
format = render.FORMAT_RGB,
width = render.get_window_width(),
height = render.get_window_height(),
min_filter = render.FILTER_LINEAR,
mag_filter = render.FILTER_LINEAR,
u_wrap = render.WRAP_CLAMP_TO_EDGE,
v_wrap = render.WRAP_CLAMP_TO_EDGE
}
})

self.constants_buffer = render.constant_buffer()
end

function update(self)
Expand All @@ -64,13 +78,28 @@ function update(self)
render.set_view(self.view)
render.set_projection(get_projection(self))

self.constants_buffer.uResolution = vmath.vector4(render.get_window_width(), render.get_window_height(), 0, 0)

-- render models
--
render.set_blend_func(render.BLEND_SRC_ALPHA, render.BLEND_ONE_MINUS_SRC_ALPHA)
render.enable_state(render.STATE_CULL_FACE)
render.enable_state(render.STATE_DEPTH_TEST)
render.set_depth_mask(true)

render.set_render_target(self.rt_normals)

-- Set material that process draws Normals to RT
render.enable_material("rt_normals")
render.draw(self.model_pred)
render.disable_material()

render.set_render_target(render.RENDER_TARGET_DEFAULT)

render.enable_texture(0, self.rt_normals, render.BUFFER_COLOR_BIT)
render.draw(self.model_pred, { constants = self.constants_buffer } )


render.set_depth_mask(false)
render.disable_state(render.STATE_DEPTH_TEST)
render.disable_state(render.STATE_CULL_FACE)
Expand Down
19 changes: 0 additions & 19 deletions main/main.script
Expand Up @@ -7,23 +7,4 @@ function init(self)
go.animate(".", "euler.z", go.PLAYBACK_LOOP_FORWARD, 360, go.EASING_INOUTQUAD, 6)
go.animate(".", "euler.x", go.PLAYBACK_LOOP_FORWARD, 360, go.EASING_INOUTQUAD, 9)
go.animate(".", "euler.y", go.PLAYBACK_LOOP_FORWARD, 360, go.EASING_INOUTQUAD, 12)

-- tint the cube and the sphere
go.set("#cube", "tint", vmath.vector4(1,1,0,1))
go.set("#sphere", "tint", vmath.vector4(1,0,0,1))

-- position directional light
self.light = vmath.vector4(0, 0, go.get_position().z + 1, 0)
go.set("#cube", "light", self.light)
go.set("#quad", "light", self.light)
go.set("#sphere", "light", self.light)
end

function on_input(self, action_id, action)
-- move directional light based on input
self.light.x = 2 * ((action.x - 480) / 480)
self.light.y = 2 * ((action.y - 320) / 320)
go.set("#cube", "light", self.light)
go.set("#quad", "light", self.light)
go.set("#sphere", "light", self.light)
end

0 comments on commit e0f2d0c

Please sign in to comment.