That's just going to break even worse...the unrealistic wave amplitude is because of heightmap goofiness. If you are set on having an animated mesh I highly recommend you just...animate the mesh instead of using the water shader, since that shader 1. doesn't work in this case, 2. isn't needed in this case (you don't want reflections!), 3. will be much worse for performance. But again, I think you would get just as good of an effect with the wall_fire shader and any decent displacement map, without having to do any actual mesh animation at all. (Your lava does have a normal map, yes?)AndakRainor wrote:I don't know if the formula is good but I tried to follow the advise in the code commentary of water_surface_calm "compensate this by increasing wave amplitude to unrealistic value..." setting it to a proportion of the time parameter.
a nice cavern filled with lava
Re: a nice cavern filled with lava
Grimrock 1 dungeon
Grimrock 2 resources
I no longer answer scripting questions in private messages. Please ask in a forum topic or this Discord server.
Grimrock 2 resources
I no longer answer scripting questions in private messages. Please ask in a forum topic or this Discord server.
- AndakRainor
- Posts: 674
- Joined: Thu Nov 20, 2014 5:18 pm
Re: a nice cavern filled with lava
Okay, also I don't understand anything about the behavior of this shader, which changes between reloads of the mod or reloads of the editor itself. So, time to try other things. What exactly is a displacement map ? (I have diffuse, normal and emissive textures, didn't touch the displacement one as I don't know what it is used for!)
PS: back from wikipedia, okay I see how it could be useful. But I must admit, in the editor, I don't see any difference with or without one displacement map or another. Is there a specific shader needed or another parameter to set for those maps to be used ?
PS: back from wikipedia, okay I see how it could be useful. But I must admit, in the editor, I don't see any difference with or without one displacement map or another. Is there a specific shader needed or another parameter to set for those maps to be used ?
Re: a nice cavern filled with lava
Displacement maps are used with the water shader and the wall_fire shader that I recommended.
Grimrock 1 dungeon
Grimrock 2 resources
I no longer answer scripting questions in private messages. Please ask in a forum topic or this Discord server.
Grimrock 2 resources
I no longer answer scripting questions in private messages. Please ask in a forum topic or this Discord server.
- AndakRainor
- Posts: 674
- Joined: Thu Nov 20, 2014 5:18 pm
Re: a nice cavern filled with lava
It seems this shader does not use my emissiveMap... The result is a black surface.
Re: a nice cavern filled with lava
use a different blend mode, it doesn't work with opaque iirc. I doubt it will ever use an emissive map but it will not have lighting anyway.
Grimrock 1 dungeon
Grimrock 2 resources
I no longer answer scripting questions in private messages. Please ask in a forum topic or this Discord server.
Grimrock 2 resources
I no longer answer scripting questions in private messages. Please ask in a forum topic or this Discord server.
- AndakRainor
- Posts: 674
- Joined: Thu Nov 20, 2014 5:18 pm
Re: a nice cavern filled with lava
The other modes make the surface nearly invisible... but the textures are opaque (dds dxt1). Should I use another format ?
Re: a nice cavern filled with lava
if you use "Additive" and put a black surface right below it, it should look the same as "Opaque" does without lighting. I'm afraid this will be needed if you want the displacement effect (still better performance than water shader though).
Grimrock 1 dungeon
Grimrock 2 resources
I no longer answer scripting questions in private messages. Please ask in a forum topic or this Discord server.
Grimrock 2 resources
I no longer answer scripting questions in private messages. Please ask in a forum topic or this Discord server.
- AndakRainor
- Posts: 674
- Joined: Thu Nov 20, 2014 5:18 pm
Re: a nice cavern filled with lava
Okay I give up on the idea of animating the surface, and use the default shader instead with just texture moves. It is so much better than anything I can do with with other shaders...
So here it is:
The code:
So here it is:
SpoilerShow
SpoilerShow
Code: Select all
defineObject{
name = "lava_effects",
components = {
{ class = "Light",
offset = vec(0, -0.5, 0),
range = 6,
color = vec(2.8, 1.2, 0.7),
brightness = 10,
castShadow = true,
shadowMapSize = 64,
staticShadows = true,
staticShadowDistance = 0, -- use static shadows always
},
{ class = "Particle",
particleSystem = "lava_effects",
offset = vec(0, -0.4, 0),
},
{
class = "TileDamager",
attackPower = 3,
damageType = "fire",
repeatCount = math.huge,
repeatDelay = 1,
onInit = function(self)
if self.go.map:getElevation(self.go.x, self.go.y) < self.go.elevation then
spawn("under_lava_effects", self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation-1)
end
end,
},
{ class = "Timer",
timerInterval = 1,
triggerOnStart = true,
onActivate = function(self)
self.go:playSound("magma_explosion")
spawn("magma_golem_meteor_impact_ground", self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation-1)
self:setTimerInterval(300*(0.1+0.9*math.random()))
end,
onInit = function(self)
self:setTimerInterval(300*math.random())
end,
},
{ class = "Sound",
sound = "fire_pit",
volume = 0.5,
},
},
placement = "floor",
editorIcon = 88,
}
defineObject{
name = "under_lava_effects",
components = {
{ class = "Particle",
particleSystem = "under_lava_effects",
},
{
class = "TileDamager",
attackPower = 1000,
damageType = "fire",
repeatCount = math.huge,
repeatDelay = 1,
onInit = function(self)
if self.go.map:getElevation(self.go.x, self.go.y) < self.go.elevation then
spawn("under_lava_effects", self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation-1)
end
end,
},
},
placement = "floor",
editorIcon = 88,
}
defineObject{
name = "lava_surface",
components = {
{
class = "Model",
model = "assets/models/env/ocean_water.fbx",
material = "lava_surface",
offset = vec(0, -0.4, 0),
},
},
placement = "floor",
dontAdjustHeight = true,
editorIcon = 264,
reflectionMode = "never",
}
defineObject{
name = "lava_surface_tiles",
baseObject = "base_floor_decoration",
components = {
{
-- updates global reflection and refraction maps
class = "WaterSurface",
planeY = -0.4,
fogColor = math.saturation(vec(0.26, 0.09, 0.042), 0.5) * 0.5,
fogDensity = 0.4,
reflectionColor = vec(1.5, 0.9, 0.27) * 0.9,
refractionColor = vec(1.5,1.0,0.5),
},
{
-- builds a continuous mesh from underwater tiles
class = "WaterSurfaceMesh",
material = "lava_surface_tiles",
underwaterMaterial = "lava_surface_tiles",
offset = vec(0, -0.4, 0),
},
},
dontAdjustHeight = true,
editorIcon = 264,
}
defineMaterial{
name = "lava_surface",
diffuseMap = "mod_assets/textures/env/lava_dif.tga",
normalMap = "assets/textures/env/beach_ground_normal.tga",
emissiveMap = "mod_assets/textures/env/lava_emissive.tga",
displacementMap = "assets/textures/env/ocean_disp.tga",
doubleSided = true,
lighting = true,
alphaTest = false,
castShadow = false,
blendMode = "Opaque",
textureAddressMode = "Wrap",
glossiness = 60,
depthBias = 0,
onUpdate = function(self, time)
self:setTexcoordScaleOffset(0.5, 0.5, math.cos(time*0.0625)*0.0625, math.sin(time*0.0625)*0.0625)
end,
}
defineMaterial{
name = "lava_surface_tiles",
diffuseMap = "mod_assets/textures/env/lava_dif.tga",
normalMap = "assets/textures/env/beach_ground_normal.tga",
emissiveMap = "mod_assets/textures/env/lava_emissive.tga",
displacementMap = "assets/textures/env/ocean_disp.tga",
doubleSided = true,
lighting = true,
alphaTest = false,
castShadow = false,
blendMode = "Opaque",
textureAddressMode = "Wrap",
glossiness = 60,
depthBias = 0,
onUpdate = function(self, time)
self:setTexcoordScaleOffset(0.5, 0.5, math.cos(time*0.0625)*0.0625, math.sin(time*0.0625)*0.0625)
end,
}
defineParticleSystem{
name = "lava_effects",
emitters = {
-- stars
{
emissionRate = 40,
emissionTime = 0,
maxParticles = 200,
boxMin = {-1.3, 0.0,-1.3},
boxMax = { 1.3, 0.5, 1.3},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = true,
texture = "assets/textures/particles/firefly_dif.tga",
lifetime = {0.5,5.0},
color0 = {4, 0.4, 0.2},
opacity = 1,
fadeIn = 0.1,
fadeOut = 1.0,
size = {0.05, 0.1},
gravity = {0,0.5,0},
airResistance = 0.1,
rotationSpeed = 5,
blendMode = "Additive",
},
-- flames 1
{
emissionRate = 5,
emissionTime = 0,
maxParticles = 5,
boxMin = {-1.5, -0.1,-1.5},
boxMax = { 1.5, -0.1, 1.5},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = false,
texture = "assets/textures/particles/flame.tga",
frameSize = 32,
frameCount = 40,
frameRate = 60,
lifetime = {0.5,1.0},
color0 = {4, 0.4, 0.2},
opacity = 0.5,
fadeIn = 0.5,
fadeOut = 0.5,
size = {0.5, 0.5},
gravity = {0,0.02,0},
airResistance = 0.1,
rotationSpeed = 1,
blendMode = "Additive",
},
-- flames 2
{
emissionRate = 5,
emissionTime = 0,
maxParticles = 5,
boxMin = {-1.5, -0.1,-1.5},
boxMax = { 1.5, -0.1, 1.5},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = false,
texture = "assets/textures/particles/flame.tga",
frameSize = 32,
frameCount = 40,
frameRate = 60,
lifetime = {0.5,1.0},
color0 = {4, 0.4, 0.2},
opacity = 0.5,
fadeIn = 0.5,
fadeOut = 0.5,
size = {0.5, 0.5},
gravity = {0,0.02,0},
airResistance = 0.1,
rotationSpeed = -1,
blendMode = "Additive",
},
-- smoke
{
emissionRate = 4,
emissionTime = 0,
maxParticles = 40,
boxMin = {-1.3, 0, -1.3},
boxMax = { 1.3, 1.0, 1.3},
sprayAngle = {0,20},
velocity = {0.4, 0.8},
texture = "assets/textures/particles/smoke_01.tga",
lifetime = {1,5},
color0 = {0.25, 0.20, 0.17},
opacity = 0.5,
fadeIn = 0.3,
fadeOut = 0.9,
size = {1.5, 2},
gravity = {0,0.3,0},
airResistance = 0.1,
rotationSpeed = 0.5,
blendMode = "Translucent",
},
}
}
defineParticleSystem{
name = "under_lava_effects",
emitters = {
-- fog under 1
{
emissionRate = 1,
emissionTime = 0,
maxParticles = 10,
boxMin = {-1.5, -1.0, -1.5},
boxMax = { 1.5, 2.0, 1.5},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = true,
texture = "assets/textures/particles/fog.tga",
lifetime = {10,10},
color0 = {1.75,0.6,0.2},
opacity = 1,
fadeIn = 2.5,
fadeOut = 2.5,
size = {5, 5},
gravity = {0,0,0},
airResistance = 0.5,
rotationSpeed = -0.3,
blendMode = "Translucent",
},
-- fog under 2
{
emissionRate = 1,
emissionTime = 0,
maxParticles = 10,
boxMin = {-1.5, -1.0, -1.5},
boxMax = { 1.5, 2.0, 1.5},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = true,
texture = "assets/textures/particles/fog.tga",
lifetime = {10,10},
color0 = {1.75,0.6,0.2},
opacity = 1,
fadeIn = 2.5,
fadeOut = 2.5,
size = {5, 5},
gravity = {0,0,0},
airResistance = 0.5,
rotationSpeed = 0.3,
blendMode = "Translucent",
},
}
}
defineSound{
name = "magma_explosion",
filename = "assets/samples/monsters/magma_golem_meteor_fall_01.wav",
loop = false,
volume = 2.5,
minDistance = 1,
maxDistance = 10,
}
Re: a nice cavern filled with lava
well it looks nice for me. It's better than the original stuff or both can be mixed. Yours can be used for large surface with lava. I will try to test some on exterior area when I will have time.
did you try to make an eruption particle?
did you try to make an eruption particle?
- AndakRainor
- Posts: 674
- Joined: Thu Nov 20, 2014 5:18 pm
Re: a nice cavern filled with lava
For the eruption effect it seems a particle is not enough to draw a trail. I will try with an object...