mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-19 17:41:33 +00:00
fixed some textures, started with sky
This commit is contained in:
parent
71c865e2e9
commit
a095572205
13 changed files with 244 additions and 21 deletions
|
@ -270,12 +270,10 @@ void RenderingManager::setWaterHeight(const float height)
|
||||||
|
|
||||||
void RenderingManager::skyEnable ()
|
void RenderingManager::skyEnable ()
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
if(mSkyManager)
|
if(mSkyManager)
|
||||||
mSkyManager->enable();
|
mSkyManager->enable();
|
||||||
|
|
||||||
mOcclusionQuery->setSunNode(mSkyManager->getSunNode());
|
mOcclusionQuery->setSunNode(mSkyManager->getSunNode());
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderingManager::skyDisable ()
|
void RenderingManager::skyDisable ()
|
||||||
|
|
|
@ -416,7 +416,7 @@ SkyManager::SkyManager (SceneNode* pMwRoot, Camera* pCamera)
|
||||||
void SkyManager::create()
|
void SkyManager::create()
|
||||||
{
|
{
|
||||||
/// \todo preload all the textures and meshes that are used for sky rendering
|
/// \todo preload all the textures and meshes that are used for sky rendering
|
||||||
/*
|
|
||||||
// Create overlay used for thunderstorm
|
// Create overlay used for thunderstorm
|
||||||
MaterialPtr material = MaterialManager::getSingleton().create( "ThunderMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME );
|
MaterialPtr material = MaterialManager::getSingleton().create( "ThunderMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME );
|
||||||
Pass* pass = material->getTechnique(0)->getPass(0);
|
Pass* pass = material->getTechnique(0)->getPass(0);
|
||||||
|
@ -517,6 +517,7 @@ void SkyManager::create()
|
||||||
stars_fp->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR);
|
stars_fp->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR);
|
||||||
stars_fp->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR);
|
stars_fp->getDefaultParameters()->setNamedAutoConstant("diffuse", GpuProgramParameters::ACT_SURFACE_DIFFUSE_COLOUR);
|
||||||
|
|
||||||
|
/*
|
||||||
for (unsigned int i=0; i<night1_ent->getNumSubEntities(); ++i)
|
for (unsigned int i=0; i<night1_ent->getNumSubEntities(); ++i)
|
||||||
{
|
{
|
||||||
MaterialPtr mp = night1_ent->getSubEntity(i)->getMaterial();
|
MaterialPtr mp = night1_ent->getSubEntity(i)->getMaterial();
|
||||||
|
@ -531,6 +532,7 @@ void SkyManager::create()
|
||||||
mp->getTechnique(0)->getPass(0)->setPolygonModeOverrideable(false);
|
mp->getTechnique(0)->getPass(0)->setPolygonModeOverrideable(false);
|
||||||
mStarsMaterials[i] = mp;
|
mStarsMaterials[i] = mp;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// Atmosphere (day)
|
// Atmosphere (day)
|
||||||
mesh = NifOgre::NIFLoader::load("meshes\\sky_atmosphere.nif");
|
mesh = NifOgre::NIFLoader::load("meshes\\sky_atmosphere.nif");
|
||||||
|
@ -543,8 +545,9 @@ void SkyManager::create()
|
||||||
atmosphere_ent->setVisibilityFlags(RV_Sky);
|
atmosphere_ent->setVisibilityFlags(RV_Sky);
|
||||||
mAtmosphereDay = mRootNode->createChildSceneNode();
|
mAtmosphereDay = mRootNode->createChildSceneNode();
|
||||||
mAtmosphereDay->attachObject(atmosphere_ent);
|
mAtmosphereDay->attachObject(atmosphere_ent);
|
||||||
mAtmosphereMaterial = atmosphere_ent->getSubEntity(0)->getMaterial();
|
atmosphere_ent->getSubEntity (0)->setMaterialName ("openmw_atmosphere");
|
||||||
mAtmosphereMaterial->getTechnique(0)->getPass(0)->setPolygonModeOverrideable(false);
|
//mAtmosphereMaterial = atmosphere_ent->getSubEntity(0)->getMaterial();
|
||||||
|
//mAtmosphereMaterial->getTechnique(0)->getPass(0)->setPolygonModeOverrideable(false);
|
||||||
|
|
||||||
// Atmosphere shader
|
// Atmosphere shader
|
||||||
HighLevelGpuProgramPtr vshader = mgr.createProgram("Atmosphere_VP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
HighLevelGpuProgramPtr vshader = mgr.createProgram("Atmosphere_VP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
||||||
|
@ -570,7 +573,7 @@ void SkyManager::create()
|
||||||
vshader->load();
|
vshader->load();
|
||||||
|
|
||||||
vshader->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
|
vshader->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
|
||||||
mAtmosphereMaterial->getTechnique(0)->getPass(0)->setVertexProgram(vshader->getName());
|
//mAtmosphereMaterial->getTechnique(0)->getPass(0)->setVertexProgram(vshader->getName());
|
||||||
|
|
||||||
HighLevelGpuProgramPtr fshader = mgr.createProgram("Atmosphere_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
HighLevelGpuProgramPtr fshader = mgr.createProgram("Atmosphere_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
||||||
"cg", GPT_FRAGMENT_PROGRAM);
|
"cg", GPT_FRAGMENT_PROGRAM);
|
||||||
|
@ -598,7 +601,7 @@ void SkyManager::create()
|
||||||
fshader->load();
|
fshader->load();
|
||||||
|
|
||||||
fshader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR);
|
fshader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR);
|
||||||
mAtmosphereMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(fshader->getName());
|
// mAtmosphereMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(fshader->getName());
|
||||||
|
|
||||||
// Clouds
|
// Clouds
|
||||||
NifOgre::NIFLoader::load("meshes\\sky_clouds_01.nif");
|
NifOgre::NIFLoader::load("meshes\\sky_clouds_01.nif");
|
||||||
|
@ -607,8 +610,9 @@ void SkyManager::create()
|
||||||
clouds_ent->setRenderQueueGroup(RQG_SkiesEarly+5);
|
clouds_ent->setRenderQueueGroup(RQG_SkiesEarly+5);
|
||||||
SceneNode* clouds_node = mRootNode->createChildSceneNode();
|
SceneNode* clouds_node = mRootNode->createChildSceneNode();
|
||||||
clouds_node->attachObject(clouds_ent);
|
clouds_node->attachObject(clouds_ent);
|
||||||
mCloudMaterial = clouds_ent->getSubEntity(0)->getMaterial();
|
//mCloudMaterial = clouds_ent->getSubEntity(0)->getMaterial();
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->setPolygonModeOverrideable(false);
|
clouds_ent->getSubEntity(0)->setMaterialName ("openmw_clouds");
|
||||||
|
//mCloudMaterial->getTechnique(0)->getPass(0)->setPolygonModeOverrideable(false);
|
||||||
clouds_ent->setCastShadows(false);
|
clouds_ent->setCastShadows(false);
|
||||||
|
|
||||||
// Clouds vertex shader
|
// Clouds vertex shader
|
||||||
|
@ -635,7 +639,7 @@ void SkyManager::create()
|
||||||
vshader2->setSource(outStream3.str());
|
vshader2->setSource(outStream3.str());
|
||||||
vshader2->load();
|
vshader2->load();
|
||||||
vshader2->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
|
vshader2->getDefaultParameters()->setNamedAutoConstant("worldViewProj", GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->setVertexProgram(vshader2->getName());
|
//mCloudMaterial->getTechnique(0)->getPass(0)->setVertexProgram(vshader2->getName());
|
||||||
|
|
||||||
// Clouds fragment shader
|
// Clouds fragment shader
|
||||||
mCloudFragmentShader = mgr.createProgram("Clouds_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
mCloudFragmentShader = mgr.createProgram("Clouds_FP", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
|
||||||
|
@ -670,17 +674,19 @@ void SkyManager::create()
|
||||||
mCloudFragmentShader->setSource(outStream2.str());
|
mCloudFragmentShader->setSource(outStream2.str());
|
||||||
mCloudFragmentShader->load();
|
mCloudFragmentShader->load();
|
||||||
mCloudFragmentShader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR);
|
mCloudFragmentShader->getDefaultParameters()->setNamedAutoConstant("emissive", GpuProgramParameters::ACT_SURFACE_EMISSIVE_COLOUR);
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(mCloudFragmentShader->getName());
|
//mCloudMaterial->getTechnique(0)->getPass(0)->setFragmentProgram(mCloudFragmentShader->getName());
|
||||||
setCloudsOpacity(0.75);
|
setCloudsOpacity(0.75);
|
||||||
|
|
||||||
ModVertexAlpha(clouds_ent, 1);
|
ModVertexAlpha(clouds_ent, 1);
|
||||||
|
|
||||||
// I'm not sure if the materials are being used by any other objects
|
// I'm not sure if the materials are being used by any other objects
|
||||||
// Make a unique "modifiable" copy of the materials to be sure
|
// Make a unique "modifiable" copy of the materials to be sure
|
||||||
mCloudMaterial = mCloudMaterial->clone("Clouds");
|
//mCloudMaterial = mCloudMaterial->clone("Clouds");
|
||||||
clouds_ent->getSubEntity(0)->setMaterial(mCloudMaterial);
|
//clouds_ent->getSubEntity(0)->setMaterial(mCloudMaterial);
|
||||||
mAtmosphereMaterial = mAtmosphereMaterial->clone("Atmosphere");
|
//mAtmosphereMaterial = mAtmosphereMaterial->clone("Atmosphere");
|
||||||
atmosphere_ent->getSubEntity(0)->setMaterial(mAtmosphereMaterial);
|
//atmosphere_ent->getSubEntity(0)->setMaterial(mAtmosphereMaterial);
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
mAtmosphereMaterial->getTechnique(0)->getPass(0)->setSelfIllumination(1.0, 1.0, 1.0);
|
mAtmosphereMaterial->getTechnique(0)->getPass(0)->setSelfIllumination(1.0, 1.0, 1.0);
|
||||||
mAtmosphereMaterial->getTechnique(0)->getPass(0)->setDiffuse(0.0, 0.0, 0.0, 0.0);
|
mAtmosphereMaterial->getTechnique(0)->getPass(0)->setDiffuse(0.0, 0.0, 0.0, 0.0);
|
||||||
|
@ -694,9 +700,9 @@ void SkyManager::create()
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->removeAllTextureUnitStates();
|
mCloudMaterial->getTechnique(0)->getPass(0)->removeAllTextureUnitStates();
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("textures\\tx_sky_cloudy.dds");
|
mCloudMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("textures\\tx_sky_cloudy.dds");
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("");
|
mCloudMaterial->getTechnique(0)->getPass(0)->createTextureUnitState("");
|
||||||
|
*/
|
||||||
|
|
||||||
mCreated = true;
|
mCreated = true;
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SkyManager::~SkyManager()
|
SkyManager::~SkyManager()
|
||||||
|
@ -724,7 +730,7 @@ void SkyManager::update(float duration)
|
||||||
if (!mEnabled) return;
|
if (!mEnabled) return;
|
||||||
|
|
||||||
// UV Scroll the clouds
|
// UV Scroll the clouds
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstantFromTime("time", MWBase::Environment::get().getWorld()->getTimeScaleFactor()/30.f);
|
//mCloudMaterial->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstantFromTime("time", MWBase::Environment::get().getWorld()->getTimeScaleFactor()/30.f);
|
||||||
|
|
||||||
/// \todo improve this
|
/// \todo improve this
|
||||||
mMasser->setPhase( static_cast<Moon::Phase>( (int) ((mDay % 32)/4.f)) );
|
mMasser->setPhase( static_cast<Moon::Phase>( (int) ((mDay % 32)/4.f)) );
|
||||||
|
@ -791,12 +797,14 @@ void SkyManager::setMoonColour (bool red)
|
||||||
void SkyManager::setCloudsOpacity(float opacity)
|
void SkyManager::setCloudsOpacity(float opacity)
|
||||||
{
|
{
|
||||||
if (!mCreated) return;
|
if (!mCreated) return;
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("opacity", Real(opacity));
|
//mCloudMaterial->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("opacity", Real(opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SkyManager::setWeather(const MWWorld::WeatherResult& weather)
|
void SkyManager::setWeather(const MWWorld::WeatherResult& weather)
|
||||||
{
|
{
|
||||||
if (!mCreated) return;
|
if (!mCreated) return;
|
||||||
|
|
||||||
|
/*
|
||||||
if (mClouds != weather.mCloudTexture)
|
if (mClouds != weather.mCloudTexture)
|
||||||
{
|
{
|
||||||
mCloudMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("textures\\"+weather.mCloudTexture);
|
mCloudMaterial->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName("textures\\"+weather.mCloudTexture);
|
||||||
|
@ -857,6 +865,7 @@ void SkyManager::setWeather(const MWWorld::WeatherResult& weather)
|
||||||
mStarsOpacity = weather.mNightFade;
|
mStarsOpacity = weather.mNightFade;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
float strength;
|
float strength;
|
||||||
float timeofday_angle = std::abs(mSunGlare->getPosition().z/mSunGlare->getPosition().length());
|
float timeofday_angle = std::abs(mSunGlare->getPosition().z/mSunGlare->getPosition().length());
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include <OgreRoot.h>
|
#include <OgreRoot.h>
|
||||||
|
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
#include <extern/shiny/Main/Factory.hpp>
|
#include <extern/shiny/Main/Factory.hpp>
|
||||||
|
|
||||||
|
|
2
extern/shiny
vendored
2
extern/shiny
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit ccaaefa59c0500cf790a1f3114c8b5593489afeb
|
Subproject commit 1d689a23fa685ab680351219c32953a3bed7ac0c
|
|
@ -0,0 +1,38 @@
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
#define MRT @shPropertyBool(mrt_output)
|
||||||
|
|
||||||
|
#ifdef SH_VERTEX_SHADER
|
||||||
|
|
||||||
|
SH_BEGIN_PROGRAM
|
||||||
|
shUniform(float4x4 wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||||
|
shInput(float2, uv0)
|
||||||
|
shOutput(float2, UV)
|
||||||
|
|
||||||
|
SH_START_PROGRAM
|
||||||
|
{
|
||||||
|
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||||
|
UV = uv0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
SH_BEGIN_PROGRAM
|
||||||
|
shSampler2D(diffuseMap)
|
||||||
|
shInput(float2, UV)
|
||||||
|
#if MRT
|
||||||
|
shDeclareMrtOutput(1)
|
||||||
|
#endif
|
||||||
|
shUniform(float4 materialDiffuse) @shAutoConstant(materialDiffuse, surface_diffuse_colour)
|
||||||
|
shUniform(float4 materialEmissive) @shAutoConstant(materialEmissive, surface_emissive_colour)
|
||||||
|
|
||||||
|
SH_START_PROGRAM
|
||||||
|
{
|
||||||
|
shOutputColor(0) = float4(1,1,1,materialDiffuse.a) * float4(materialEmissive.xyz, 1) * shSample(diffuseMap, UV);
|
||||||
|
|
||||||
|
#if MRT
|
||||||
|
shOutputColor(1) = float4(1,1,1,1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,15 @@
|
||||||
|
shader_set atmosphere_vertex
|
||||||
|
{
|
||||||
|
source atmosphere.shader
|
||||||
|
type vertex
|
||||||
|
profiles_cg vs_2_0 arbvp1
|
||||||
|
profiles_hlsl vs_2_0
|
||||||
|
}
|
||||||
|
|
||||||
|
shader_set atmosphere_fragment
|
||||||
|
{
|
||||||
|
source atmosphere.shader
|
||||||
|
type fragment
|
||||||
|
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||||
|
profiles_hlsl ps_2_0
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
#define MRT @shPropertyBool(mrt_output)
|
||||||
|
|
||||||
|
#ifdef SH_VERTEX_SHADER
|
||||||
|
|
||||||
|
SH_BEGIN_PROGRAM
|
||||||
|
shUniform(float4x4 wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||||
|
shInput(float2, uv0)
|
||||||
|
shOutput(float2, UV)
|
||||||
|
|
||||||
|
SH_START_PROGRAM
|
||||||
|
{
|
||||||
|
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||||
|
UV = uv0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
SH_BEGIN_PROGRAM
|
||||||
|
shSampler2D(diffuseMap)
|
||||||
|
shInput(float2, UV)
|
||||||
|
#if MRT
|
||||||
|
shDeclareMrtOutput(1)
|
||||||
|
#endif
|
||||||
|
shUniform(float4 materialDiffuse) @shAutoConstant(materialDiffuse, surface_diffuse_colour)
|
||||||
|
shUniform(float4 materialEmissive) @shAutoConstant(materialEmissive, surface_emissive_colour)
|
||||||
|
|
||||||
|
SH_START_PROGRAM
|
||||||
|
{
|
||||||
|
shOutputColor(0) = float4(1,1,1,materialDiffuse.a) * float4(materialEmissive.xyz, 1) * shSample(diffuseMap, UV);
|
||||||
|
|
||||||
|
#if MRT
|
||||||
|
shOutputColor(1) = float4(1,1,1,1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,15 @@
|
||||||
|
shader_set clouds_vertex
|
||||||
|
{
|
||||||
|
source clouds.shader
|
||||||
|
type vertex
|
||||||
|
profiles_cg vs_2_0 arbvp1
|
||||||
|
profiles_hlsl vs_2_0
|
||||||
|
}
|
||||||
|
|
||||||
|
shader_set clouds_fragment
|
||||||
|
{
|
||||||
|
source clouds.shader
|
||||||
|
type fragment
|
||||||
|
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||||
|
profiles_hlsl ps_2_0
|
||||||
|
}
|
|
@ -39,7 +39,7 @@ material openmw_objects_base
|
||||||
|
|
||||||
texture_unit diffuseMap
|
texture_unit diffuseMap
|
||||||
{
|
{
|
||||||
texture $diffuseMap
|
direct_texture $diffuseMap
|
||||||
create_in_ffp true
|
create_in_ffp true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,9 @@
|
||||||
shInput(float, depthPassthrough)
|
shInput(float, depthPassthrough)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if MRT
|
||||||
shUniform(float far) @shAutoConstant(far, far_clip_distance)
|
shUniform(float far) @shAutoConstant(far, far_clip_distance)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if LIGHTING
|
#if LIGHTING
|
||||||
shInput(float3, normalPassthrough)
|
shInput(float3, normalPassthrough)
|
||||||
|
@ -110,11 +112,15 @@
|
||||||
|
|
||||||
@shEndForeach
|
@shEndForeach
|
||||||
|
|
||||||
|
#if HAS_VERTEXCOLOR
|
||||||
|
ambient *= colorPassthrough.xyz;
|
||||||
|
#endif
|
||||||
|
|
||||||
shOutputColor(0).xyz *= (ambient + diffuse + materialEmissive.xyz);
|
shOutputColor(0).xyz *= (ambient + diffuse + materialEmissive.xyz);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if HAS_VERTEXCOLOR
|
#if HAS_VERTEXCOLOR && !LIGHTING
|
||||||
shOutputColor(0).xyz *= colorPassthrough.xyz;
|
shOutputColor(0).xyz *= colorPassthrough.xyz;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -123,6 +129,9 @@
|
||||||
shOutputColor(0).xyz = shLerp (shOutputColor(0).xyz, fogColor, fogValue);
|
shOutputColor(0).xyz = shLerp (shOutputColor(0).xyz, fogColor, fogValue);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// prevent negative color output (for example with negative lights)
|
||||||
|
shOutputColor(0).xyz = max(shOutputColor(0).xyz, float3(0,0,0));
|
||||||
|
|
||||||
#if MRT
|
#if MRT
|
||||||
shOutputColor(1) = float4(depthPassthrough / far,1,1,1);
|
shOutputColor(1) = float4(depthPassthrough / far,1,1,1);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,10 +1,18 @@
|
||||||
material openmw_moon
|
material openmw_moon
|
||||||
{
|
{
|
||||||
|
mrt_output true
|
||||||
pass
|
pass
|
||||||
{
|
{
|
||||||
vertex_program moon_vertex
|
vertex_program moon_vertex
|
||||||
fragment_program moon_fragment
|
fragment_program moon_fragment
|
||||||
|
|
||||||
|
polygon_mode_overrideable off
|
||||||
|
|
||||||
|
shader_properties
|
||||||
|
{
|
||||||
|
mrt_output $mrt_output
|
||||||
|
}
|
||||||
|
|
||||||
texture_unit diffuseMap
|
texture_unit diffuseMap
|
||||||
{
|
{
|
||||||
texture $diffuseMap
|
texture $diffuseMap
|
||||||
|
@ -15,11 +23,22 @@ material openmw_moon
|
||||||
|
|
||||||
material openmw_clouds
|
material openmw_clouds
|
||||||
{
|
{
|
||||||
|
mrt_output true
|
||||||
pass
|
pass
|
||||||
{
|
{
|
||||||
vertex_program clouds_vertex
|
vertex_program clouds_vertex
|
||||||
fragment_program clouds_fragment
|
fragment_program clouds_fragment
|
||||||
|
|
||||||
|
polygon_mode_overrideable off
|
||||||
|
|
||||||
|
scene_blend alpha_blend
|
||||||
|
depth_write off
|
||||||
|
|
||||||
|
shader_properties
|
||||||
|
{
|
||||||
|
mrt_output $mrt_output
|
||||||
|
}
|
||||||
|
|
||||||
// second diffuse map is used for weather transitions
|
// second diffuse map is used for weather transitions
|
||||||
texture_unit diffuseMap1
|
texture_unit diffuseMap1
|
||||||
{
|
{
|
||||||
|
@ -36,20 +55,39 @@ material openmw_clouds
|
||||||
|
|
||||||
material openmw_atmosphere
|
material openmw_atmosphere
|
||||||
{
|
{
|
||||||
|
mrt_output true
|
||||||
pass
|
pass
|
||||||
{
|
{
|
||||||
vertex_program atmosphere_vertex
|
vertex_program atmosphere_vertex
|
||||||
fragment_program atmosphere_fragment
|
fragment_program atmosphere_fragment
|
||||||
|
|
||||||
|
polygon_mode_overrideable off
|
||||||
|
|
||||||
|
scene_blend alpha_blend
|
||||||
|
depth_write off
|
||||||
|
|
||||||
|
shader_properties
|
||||||
|
{
|
||||||
|
mrt_output $mrt_output
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
material openmw_stars
|
material openmw_stars
|
||||||
{
|
{
|
||||||
|
mrt_output true
|
||||||
pass
|
pass
|
||||||
{
|
{
|
||||||
vertex_program stars_vertex
|
vertex_program stars_vertex
|
||||||
fragment_program stars_fragment
|
fragment_program stars_fragment
|
||||||
|
|
||||||
|
polygon_mode_overrideable off
|
||||||
|
|
||||||
|
shader_properties
|
||||||
|
{
|
||||||
|
mrt_output $mrt_output
|
||||||
|
}
|
||||||
|
|
||||||
texture_unit diffuseMap
|
texture_unit diffuseMap
|
||||||
{
|
{
|
||||||
diffuseMap $diffuseMap
|
diffuseMap $diffuseMap
|
||||||
|
@ -60,11 +98,19 @@ material openmw_stars
|
||||||
// used for both sun and sun glare
|
// used for both sun and sun glare
|
||||||
material openmw_sun
|
material openmw_sun
|
||||||
{
|
{
|
||||||
|
mrt_output true
|
||||||
pass
|
pass
|
||||||
{
|
{
|
||||||
vertex_program sun_vertex
|
vertex_program sun_vertex
|
||||||
fragment_program sun_fragment
|
fragment_program sun_fragment
|
||||||
|
|
||||||
|
polygon_mode_overrideable off
|
||||||
|
|
||||||
|
shader_properties
|
||||||
|
{
|
||||||
|
mrt_output $mrt_output
|
||||||
|
}
|
||||||
|
|
||||||
texture unit diffuseMap
|
texture unit diffuseMap
|
||||||
{
|
{
|
||||||
diffuseMap $diffuseMap
|
diffuseMap $diffuseMap
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
#include "core.h"
|
||||||
|
|
||||||
|
#define MRT @shPropertyBool(mrt_output)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SH_VERTEX_SHADER
|
||||||
|
|
||||||
|
SH_BEGIN_PROGRAM
|
||||||
|
shUniform(float4x4 wvp) @shAutoConstant(wvp, worldviewproj_matrix)
|
||||||
|
shInput(float2, uv0)
|
||||||
|
shOutput(float2, UV)
|
||||||
|
|
||||||
|
SH_START_PROGRAM
|
||||||
|
{
|
||||||
|
shOutputPosition = shMatrixMult(wvp, shInputPosition);
|
||||||
|
UV = uv0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
SH_BEGIN_PROGRAM
|
||||||
|
shSampler2D(diffuseMap)
|
||||||
|
shInput(float2, UV)
|
||||||
|
#if MRT
|
||||||
|
shDeclareMrtOutput(1)
|
||||||
|
#endif
|
||||||
|
shUniform(float4 materialDiffuse) @shAutoConstant(materialDiffuse, surface_diffuse_colour)
|
||||||
|
shUniform(float4 materialEmissive) @shAutoConstant(materialEmissive, surface_emissive_colour)
|
||||||
|
|
||||||
|
SH_START_PROGRAM
|
||||||
|
{
|
||||||
|
shOutputColor(0) = float4(1,1,1,materialDiffuse.a) * float4(materialEmissive.xyz, 1) * shSample(diffuseMap, UV);
|
||||||
|
|
||||||
|
#if MRT
|
||||||
|
shOutputColor(1) = float4(1,1,1,1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,15 @@
|
||||||
|
shader_set sun_vertex
|
||||||
|
{
|
||||||
|
source sun.shader
|
||||||
|
type vertex
|
||||||
|
profiles_cg vs_2_0 arbvp1
|
||||||
|
profiles_hlsl vs_2_0
|
||||||
|
}
|
||||||
|
|
||||||
|
shader_set sun_fragment
|
||||||
|
{
|
||||||
|
source sun.shader
|
||||||
|
type fragment
|
||||||
|
profiles_cg ps_2_x ps_2_0 ps arbfp1
|
||||||
|
profiles_hlsl ps_2_0
|
||||||
|
}
|
Loading…
Reference in a new issue