A ray marching renderer in rust
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
rmarcher/scenes/tsm.lua

157 lines
3.4 KiB

-- Scene developed by TSM71
-- Also this took 30 hours to render
local COLOR_BLACK = colorvec.new(0, 0, 0, 0)
local GRAY = material.newfromdiagonal(
COLOR_BLACK,
colorvec.new(0.5, 0.5, 0.5, 0.5),
surfacetype.DIFFUSE
)
local CYAN = material.newfromdiagonal(
COLOR_BLACK,
colorvec.new(0, 1, 1, 0),
surfacetype.DIFFUSE
)
local PINK = material.newfromdiagonal(
COLOR_BLACK,
colorvec.new(1, .5, .5, 0),
surfacetype.DIFFUSE
)
local RED = material.newfromdiagonal(
COLOR_BLACK,
colorvec.new(1, 0, 0, 0),
surfacetype.DIFFUSE
)
local MAGENTA = material.newfromdiagonal(
COLOR_BLACK,
colorvec.new(1, 0, 1, 0),
surfacetype.DIFFUSE
)
local MIRROR = material.newfromdiagonal(
COLOR_BLACK,
colorvec.new(1, 1, 1, 1),
surfacetype.REFLECTIVE
)
local FLUORESCENT = material.new(
COLOR_BLACK,
colormat.new(
.25, 0, 0, .25,
0, .25, 0, .75,
0, 0, .25, 0,
0, 0, 0, 0
),
surfacetype.DIFFUSE
)
--[[
obj.transformaround = function(a, b, c)
return util.translate(
util.transform(
util.translate(
a,
-c
),
b
),
c
)
end
--]]
--obj.transformaround = function(a, _b, _c) return a end
--obj.affinetransform = function(a, _b, _c) return a end
--obj.smoothunion = function(a, b, _r) return obj.union(a, b) end
---[[
util.stacktransforms = function(list)
--do return list[1] end
--do return list[#list] end
local n = #list
local a = mat3.I
--for i=n, 1, -1 do
for i=1, n do
a = list[i] * a
--a = a * list[i]
end
return a
end
--]]
return obj.withlights(
obj.transformaround(
obj.withlights(
util.union({
util.intersection({
util.union({
obj.withmaterial(
obj.negation(
util.union({
obj.cuboid(vec3.new(0, 0, 0), vec3.new(.5, 1, 4)),
obj.cuboid(vec3.new(0, 0, 0), vec3.new(4, 1, .5))
})
),
GRAY
),
obj.withmaterial(
util.intersection({
util.union({
obj.cuboid(vec3.new(0, 1, 0), vec3.new(.4, .1, 3.9)),
obj.cuboid(vec3.new(0, 1, 0), vec3.new(3.9, .1, .4))
}),
obj.negation(
util.union({
obj.cuboid(vec3.new(0, 1, 0), vec3.new(.3, 1, 3.8)),
obj.cuboid(vec3.new(0, 1, 0), vec3.new(3.8, 1, .3))
})
)
}),
FLUORESCENT
),
obj.smoothunion(
obj.withmaterial(
obj.sphere(vec3.new(0, .75, 0), .25),
CYAN
),
obj.withmaterial( -- withdynamicmaterial
obj.sphere(vec3.new(-.5, .5, 0), .25),
MAGENTA --dynamicmaterial.missingtexture(vec3.new(-.5, .5, 0))
),
.5
)
}),
obj.withmaterial(
obj.negation(
obj.cuboid(vec3.new(0, 0, 0), vec3.new(2, .25, 2))
),
PINK
)
}),
obj.withmaterial(
obj.cylinder(vec3.new(1, 0, 0), .375),
RED
),
util.transform(
obj.withmaterial(
obj.torus(vec3.new(0, 0, -1), .375, .125),
MIRROR
),
transform.SWAPYZ
)
}),
{
light.new(vec3.new(.45, 1-.2, -.45), colorvec.new(0, 0, 0, .1)),
--light.new(vec3.new(.45, 1-.2, -.45), colorvec.new(0, 0, 0, 1)),
}
),
util.stacktransforms({
transform.scalexyz(1, -1, 1),
transform.rotatez(10*math.pi/180),
}),
vec3.new(0, 0, -1.5)
),
{
light.new(vec3.new(0, .9375, 0), colorvec.new(.5, .25, 0, 0)),
light.new(vec3.new(0, .9375, -.625), colorvec.new(0, 0, 1, 0)),
--light.new(vec3.new(0, .9375, 0), colorvec.new(5, 2.5, 0, 0)),
--light.new(vec3.new(0, .9375, -.625), colorvec.new(0, 0, 10, 0)),
}
)